c - 为结构中的双指针分配内存时遇到问题

标签 c segmentation-fault dynamic-memory-allocation

我正在尝试为指针分配内存,但有一个指向该指针地址的引用。我对 C 还是很陌生,这是我第一次真正使用双指针。 所以我有两个结构,它们看起来像这样:

typedef struct myNodes {
   int data;
   struct myNodes *next;
} listElement;


typedef struct {
   listElement **ptrToElements;
} myStruct;

在另一个文件中,我尝试通过执行以下操作为我的指针动态分配内存:

myStruct *myStruct = malloc(sizeof(*myStruct));
*(myStruct->ptrToElements) = (listElement*)malloc(sizeof(listElement));

但我一直遇到这样的段错误。可能是什么问题?谢谢!

最佳答案

问题在于

*(myStruct->ptrToElements) ....

声明。在取消引用 myStruct->ptrToElements 之前,您需要确保它指向有效内存。

详细来说,您为 myStruct 分配内存。很好。

这构成了为成员 ptrToElements 分配内存。好。

  • 问题:ptrToElements 指向什么?

  • 答案:不确定。

因此,当您尝试取消引用指向不确定 内存地址的指针时,它几乎是无效的内存地址,并且尝试这样做会引发未定义的行为。

解决方案:您需要为 myStruct->ptrToElements 分配内存,然后才能继续并取消引用它。

话虽如此,请参阅do I cast the result of malloc?

关于c - 为结构中的双指针分配内存时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54533688/

相关文章:

c - 如何在 OpenGL 中使用嵌套循环用较小的正方形列表填充平面?

c - 如何在 Windows 中打印\n?

c - 在struct中需要一个 "variable"大小的二维数组

生成可能的有序对(最多可达一定数量)并查找该对的二元运算的最大值的代码

c - 编译器是否将内存放置在堆上?

assembly - 缓冲区溢出攻击(攻击实验室第 2 阶段)

c - 为什么我的二维数组带有 malloc int segfault?

c - C 中带有 char* 数组的 scanf 段错误

arrays - 如何消除使用指针的二维数组声明中的错误?

c - 为什么 valgrind 没有检测到由于 realloc 而导致的这种可能的内存泄漏?