繁体   English   中英

访问动态分配的C结构数组时出现段错误

Segfault while accessing dynamicly allocated C struct array

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有以下以下列方式定义的结构

typedef struct _abcd {
    int a;
    unsigned long b;  
    void (*c)(int);
    int d;
} abcd_t, *abcd;

现在我有以下代码

static abcd foo

int set_size(int size){
   foo = malloc(sizeof(abcd) * size);
}

出于某些原因,这段代码在访问数组成员的某些属性时会给我分段错误。 但是我已经注意到,如果我将malloc行更改为以下内容-它可以解决此问题

foo = malloc(sizeof(foo[0]) * size);

我发现它很奇怪,因为sizeof(foo[0]) = sizeof(abcd)那么这里到底有什么区别?

谢谢

2 个回复

显然sizeof(foo[0]) = sizeof(abcd)

它是不一样的,因为你typedefabcd是一个*指针*到struct _abcd

采用

foo = malloc(sizeof(*foo) * size);

即使在某些时候foo的类型发生变化也要具有健壮的代码。

你的

 foo = malloc(sizeof(foo[0]) * size); 

本质上是相同的,因为foo[0]只是*(foo + 0)语法糖,它变成*foo

错误是您正在分配sizeof(abcd) ,但这是一个指针,而不是结构。 您需要sizeof(abcd_t)sizeof(*abcd)

1 当访问main(在函数中分配)的动态分配的内存时出现段错误[C]

这个问题已经在这里有了答案: 动态内存访问仅在功能 1中有效 所以我想做的是使用指针创建一个二维数组作为矩阵。 我将一个双指针以及行/列放入我的CreateMatrix函数中,并动态地将数组分配给它们。 我将10个填充到所有它们中进行测试,结果表明它们已全部分配 ...

2 在C中动态分配内存时出现段错误

我一直在尝试在C中建立优先级队列。 首先,我进行一些初始化工作,例如分配空间。 以下是Initialize例程, PriorityQueue是一个指针。 这是测试代码的样子 但是,当我尝试将元素插入堆中时,会弹出分段错误。 只需从Initialize例程返回Prior ...

2011-09-08 01:39:52 2 188   c
3 动态分配的矩阵在打印时出现段错误

该代码通过一系列函数调用分配矩阵,但是当我打印它时,它返回一个分段错误错误。 请注意,只有当我在主菜单中使用mat_print()来打印矩阵时,才会发生这种情况;如果我在mat_fill()函数中使用该矩阵,则它会正常工作,表明已正确初始化。 有什么问题? ...

4 将行读入动态分配的char指针数组时出现段错误

在C语言中,我试图实现一个使用getline()从文件读取所有行的函数。 它的实现与getline()类似,特别是以下事实:如果没有足够的内存分配来存储指向行的下一个指针,它将使用realloc()来调整char**大小。 不幸的是,在字符串复制过程中出现段错误。 经过一番摸索之后,我 ...

2019-02-19 00:48:05 2 40   c/ posix
5 将字符串复制到动态分配的数组时出现段错误?

在我的程序中,我有一个全局结构: 以及将每张卡初始化为默认值的函数: 总的来说,初始化函数是为未打乱的“卡片”牌组调用的: 稍后,我试图用从文件中引入的字符串覆盖阵列中卡的“操作”字符串(该文件有效;我自己编写了该字符串)。 输入的字符串最多为8个字符,因此它将适合已分 ...

6 动态分配的数组作为C ++中的结构成员而出现分段错误?

我正在编写一个程序,该程序使用结构数组来存储一定数量的学生的姓名,身份证号和测试分数数组。 结构数组和考试分数成员数组都需要动态分配。 我已经开始使用允许用户输入每个学生的考试成绩的功能,但是我在最后一个功能(getScores功能)中的cin遇到了问题。 当使用Linux时,我遇到了分段 ...

7 分配结构数组时出现段错误

在花了很长时间试图调试这个之后,我来寻求你的帮助。 基本上在本练习中,我试图读取字符串"31|Name1;23|Name2;15|Name3"并将其存储在struct s_perso的数组中,其中| 标志着一个时代的结束和一个名字的开始,以及在哪里; 正在标记一个新结构的开始。 这是给定的 ft_ ...

8 C动态分配结构数组及其组件

在C中动态分配结构数组及其组件的正确方法是什么? 我已经做了一些行之有效的事情,但是我对它是否正确表示怀疑。 我有以下代码: 这是我需要动态分配的结构数组: 这是我需要初始化struct数组时调用的函数: 然后在我的主要职能,我有这个: 另外,当我完成该结构的工作 ...

9 在C中动态分配结构数组

我只是想知道以下是否有效。 我有一个名为foo的结构,定义如下: 在运行时,我需要创建一个上述结构的数组,其大小取决于我从文件输入中接收的值。 我们说这个大小是k 。 以下代码是否会适当地分配动态大小的结构数组? 编辑:如果我想访问这些数组中的结构的成员,我将使用格式foo ...

10 动态分配结构C的数组

我正在尝试在c中创建一个结构数组,但是我无法使其工作。 当我尝试运行它时,程序崩溃。 我有一个将列表打印到文件的功能,有时到达此功能,有时会崩溃。 我必须使用单独的函数从文件中读取列表。 显然,该程序具有更多功能,但是可以正常运行。 我的输入文件如下所示: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM