为啥在尝试使用指针访问结构时出现此分段错误?

     2023-02-18     290

关键词:

【中文标题】为啥在尝试使用指针访问结构时出现此分段错误?【英文标题】:why am i getting this segmentation fault when trying to access a struct using a pointer?为什么在尝试使用指针访问结构时出现此分段错误? 【发布时间】:2020-12-12 06:21:22 【问题描述】:

我正在尝试学习嵌套结构。当我使用结构变量访问它时,它工作正常。 但是当我尝试使用指针访问它时,它会显示分段错误。

#include <stdio.h>
#include <stdlib.h>

struct Vehicle 
    int eng;
    int weight;
;

struct Driver 
    int id;
    float rating;
    struct Vehicle v;
;

void main() 
    struct Driver *d1;
    d1->id = 123456;
    d1->rating = 4.9;
    d1->v.eng = 456789;

    printf("%d\n", d1->id);
    printf("%f\n", d1->rating);
    printf("%d\n", d1->v.eng);

【问题讨论】:

由于您没有为结构驱动程序分配内存,因此出现分段错误!您可以在堆栈上分配内存(通过声明驱动程序,struct Driver d; struct Driver* pd=&amp;d;)或通过调用malloc 在堆上分配内存。 struct Driver* pd = malloc(sizeof(struct Driver)); 【参考方案1】:

在取消引用之前,您必须初始化指向有效缓冲区地址的指针。

例如:

void main()
    struct Driver d; /* add this */
    struct Driver *d1;
    d1 = &d; /* add this */

另外我建议您在托管环境中使用标准int main(void) 而不是void main(),这在C89 中是非法的,在C99 或更高版本中是由实现定义的,除非您有特殊原因使用非标准签名。

【讨论】:

【参考方案2】:

您需要先初始化指针,然后才能访问它所指向的内容。这是修复它的一种方法:

    struct Driver data;
    struct Driver *d1 = &data;
    d1->id=123456;
    d1->rating=4.9;
    d1->v.eng=456789;

    printf("%d\n",d1->id);
    printf("%f\n",d1->rating);
    printf("%d\n",d1->v.eng);

注意data的添加,以及d1的初始化指向它。运行时,它会产生:

123456
4.900000
456789

另一种初始化它的方法是通过malloc 使用动态分配的内存,在这种情况下,您稍后将释放您分配的内存。

【讨论】:

【参考方案3】:

你使用了指针d1,但没有初始化它。

你需要先初始化它,例如malloc:

struct Driver *d1 = malloc(sizeof(struct Driver));

if(NULL == d1)

    perror("can't allocate memory");
    exit(1);


// ... using d1

free(d1);
return 0;

【讨论】:

您应该检查malloc() 返回值并调用free()。请将此添加到您的答案中。

在 C++ 中使用指针的数组:访问返回的数组时出现分段错误

...间】:2016-11-2817:06:12【问题描述】:我是C++新手,我正在尝试使用指向指针的指针构建一个3维数组。我确信有更有效的方法可以做到这一点,但我目前正在尝试理解指针。作为示例代码,我最初有以下部分,它工作正 查看详情

为啥在尝试使用 NodeJS 和 Tedious 将数据插入 SQL Server 时出现此错误?

】为啥在尝试使用NodeJS和Tedious将数据插入SQLServer时出现此错误?【英文标题】:WhydoIgetthiserrorwhiletryingtoinsertdatatoSQLServerwithNodeJSandTedious?为什么在尝试使用NodeJS和Tedious将数据插入SQLServer时出现此错误?【发布时间】:2021-12-2405:42... 查看详情

为啥在使用 Cordova 构建 APK 时出现此错误?

】为啥在使用Cordova构建APK时出现此错误?【英文标题】:WhydoIgetthiserrorwhilebuildinganAPKwithCordova?为什么在使用Cordova构建APK时出现此错误?【发布时间】:2020-08-0410:11:33【问题描述】:我正在尝试制作一个网络应用程序的APK,我将... 查看详情

为啥当我尝试在 MariaDB 数据库上创建此函数(使用点数据类型)时出现此错误?

】为啥当我尝试在MariaDB数据库上创建此函数(使用点数据类型)时出现此错误?【英文标题】:WhyIobtainthiserrorwhenItrytocreatethisfuncion(thatusepointdatatype)onaMariaDBdatabase?为什么当我尝试在MariaDB数据库上创建此函数(使用点数据类型)... 查看详情

为啥在尝试将firebase添加到flutter时出现此错误“已弃用的API”

】为啥在尝试将firebase添加到flutter时出现此错误“已弃用的API”【英文标题】:whyhavingthiserror\'deprecatedAPI\'whentryingaddedfirebasetoflutter为什么在尝试将firebase添加到flutter时出现此错误“已弃用的API”【发布时间】:2021-06-0816:07:55【... 查看详情

为啥在尝试将 Angular 父组件的属性绑定到子组件时出现此错误?

】为啥在尝试将Angular父组件的属性绑定到子组件时出现此错误?【英文标题】:WhyamIobtainingthiserrortryingtobindthepropertiesfromanAngularparentcomponenttoachildcomponent?为什么在尝试将Angular父组件的属性绑定到子组件时出现此错误?【发布时... 查看详情

为啥在尝试将 Hibernate Spatial 用于 Spring Boot 项目时出现此错误?实例化异常

】为啥在尝试将HibernateSpatial用于SpringBoot项目时出现此错误?实例化异常【英文标题】:WhyIhavethiserrortryingtouseHibernateSpatialintoaSpringBootproject?InstantiationException为什么在尝试将HibernateSpatial用于SpringBoot项目时出现此错误?实例化异常... 查看详情

为啥在尝试将 UIPopover 附加到不同类中的 UIButton 时出现此构建错误?

】为啥在尝试将UIPopover附加到不同类中的UIButton时出现此构建错误?【英文标题】:WhythisbuilderrorwhentryingtoattachaUIPopovertoaUIButtoninadifferentclass?为什么在尝试将UIPopover附加到不同类中的UIButton时出现此构建错误?【发布时间】:2014-0... 查看详情

访问填充了从管道读取的数据的结构时出现分段错误

...readfrompipe【发布时间】:2011-04-1922:25:08【问题描述】:在尝试访问名为Request的结构时,我一直遇到分段错误,该结构填充了从管道读取的数据。我的代码有什么问题?错误在这里抛出一个简单的printf试图打印名称字段结构定义... 查看详情

为啥在尝试从 api 获取数据时出现此错误“TypeError:字符串索引必须是整数”?

】为啥在尝试从api获取数据时出现此错误“TypeError:字符串索引必须是整数”?【英文标题】:WhyamIgettingthiserror"TypeError:stringindicesmustbeintegers"whentryingtofetchdatafromanapi?为什么在尝试从api获取数据时出现此错误“TypeError:字... 查看详情

尝试使用指向 char* 的指针时出现总线错误 10 或分段错误 11,具体取决于封装

】尝试使用指向char*的指针时出现总线错误10或分段错误11,具体取决于封装【英文标题】:buserror10orsegmentationfault11whentryingtousepointerstochar*dependingonencapsulation【发布时间】:2014-09-1606:38:48【问题描述】:我正在尝试使用基本char*并... 查看详情

使用指向指针 C++ 的指针时出现分段错误

...C++【发布时间】:2015-11-0920:29:49【问题描述】:我一直在尝试使用指向指针的指针来执行类似于树中的中序遍历的操作。这是我的代码structnodecharc=\'\\0\';intfreq=0;node*left=NULL;node*right=NULL;stringcode="" 查看详情

访问结构时出现分段错误

...命令时,程序给出了分段错误。我不知道为什么。我应该使用malloc来修复它吗?文件sokoban.dat的内容(只有1行以\'\\n\'结尾)是"chicago;addie;storyst 查看详情

为啥在为 ROR 安装 DevKit 时出现此错误

】为啥在为ROR安装DevKit时出现此错误【英文标题】:WhyamIgettingthiserrorduringDevKitinstallforROR为什么在为ROR安装DevKit时出现此错误【发布时间】:2014-09-1121:08:16【问题描述】:我同时使用--force和不使用。仍然没有骰子。这一切都开始... 查看详情

尝试从常量 char * 类型的指针复制数据时出现“超出内存访问”错误。为啥?

...char*类型的指针复制数据时出现“超出内存访问”错误。为啥?【英文标题】:Getting"accessingbeyondmemory"errorwhenitistriedtocopydatafromapointeroftypeconstantchar*.Why?尝试从常量char*类型的指针复制数据时出现“超出内存访问”错误。为... 查看详情

为啥在我的程序中打开某些 wav 文件时出现此错误“EMCIDeviceError”

】为啥在我的程序中打开某些wav文件时出现此错误“EMCIDeviceError”【英文标题】:WhydoIgetthiserror"EMCIDeviceError"whenopeningsomewavfilesinmyprogram为什么在我的程序中打开某些wav文件时出现此错误“EMCIDeviceError”【发布时间】:2010-... 查看详情

为啥在将应用程序部署到 Heroku 时出现此错误?

】为啥在将应用程序部署到Heroku时出现此错误?【英文标题】:WhydoIobtainthiserrorwhendeployingapptoHeroku?为什么在将应用程序部署到Heroku时出现此错误?【发布时间】:2016-04-1010:27:18【问题描述】:使用github将我的应用程序部署到herok... 查看详情

删除时出现分段错误

...】:2020-07-2914:34:26【问题描述】:我是C++的新手,我正在尝试实现一个树结构,但我遇到了一个分段错误,该错误在删除树时出现。这段代码很简单,我有一个Node类,其中包含指向其子节点的指针。#include<vector>classNodepublic:... 查看详情