gpt4 book ai didi

C 段错误双指针赋值位于结构内部而不是外部。

转载 作者:行者123 更新时间:2023-11-30 20:20:33 25 4
gpt4 key购买 nike

所以这是一个效果很好的简单作业:

int **a = malloc(sizeof(int*));
int *b;
a[0] = b;

但是当我尝试通过指向结构的指针在结构内部执行相同操作时:

typedef struct jojo
{
int **a ;
}jojo;

假设我为一个名为 alpha 的 jojo 指针分配了很多空间,例如 100 个整数......

jojo *alpha = malloc(sizeof(int)*100);
int *b;
alpha->a[0] = b;

此处存在段错误。我完全迷失了,所以我寻求帮助。谢谢。

最佳答案

当你这样做时

jojo *alpha = malloc(sizeof(int)*100);

您只为结构分配内存(并且比结构所需的多得多),而不是内部成员指向的地方。更糟糕的是,malloc 不会初始化它分配的内存,其内容将不确定

最后一部分意味着指针a看起来是随机的,取消引用它会导致undefined behavior .

要解决您的问题,您需要首先为结构分配内存,然后为结构内部的指针分配内存:

jojo *alpha = malloc(sizeof *alpha);  // Allocate memory for the structure
alpha->a = malloc(100 * sizeof *alpha->a); // Allocate memory for a 100 pointers to `int`

关于C 段错误双指针赋值位于结构内部而不是外部。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45859127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com