我正在创建一个指向结构的指针,以在C中创建一个带malloc的动态数组,但是我得到一个调用struct数组的分段错误.这是我的代码的快速概述:
#include <stdio.h>
typedef struct {
int test1;
int test2;
}testStruct;
int main() {
testStruct **neato;
neato = (testStruct **) malloc( sizeof(testStruct *) * 5);
// Array of 5 for convience
// any neato[x]->testy call results in segmentation fault.
scanf("%d", &neato[0]->test1); // Segmentation fault
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了其他调用,如(*neato)[0] .test1,所有这些都会导致分段错误.这显然不是正确的方法,或者我的GNU编译器严重过时.
你为5个指针分配了足够的内存.但是你没有初始化指针,所以它们是垃圾.分配指针,然后继续初始化每个指针.
int elems = 5;
neato = malloc(sizeof(testStruct *) * elems);
for( i = 0; i < elems; ++i ) {
neato[i] = malloc(sizeof(testStruct));
}
Run Code Online (Sandbox Code Playgroud)
另外,我不认为这里需要一个指针数组.为什么不简单地分配足够的空间5 testStruct秒(即neato成为a testStruct*)并将该指针的地址传递给初始化它的函数?