繁体   English   中英

指向结构的指针和数组的 malloc memory

[英]Pointer to a Pointer to a Structure and malloc memory for array

我正在创建一个指向结构指针的指针,以在 C 中使用 malloc 创建一个动态数组,但我得到一个调用结构数组的分段错误。 这是我的代码的简要说明:

#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;
    }

我尝试了 (*neato)[0].test1 等其他调用,但都导致分段错误。 这显然不是执行此操作的正确方法,或者我的 GNU 编译器已经严重过时了。

您已经为 5 个指针分配了足够的 memory。 但是你还没有初始化指针,所以它们是垃圾。 分配指针,然后继续初始化每个指针。

int elems = 5;

neato = malloc(sizeof(testStruct *) * elems);
for( i = 0; i < elems; ++i ) {
    neato[i] = malloc(sizeof(testStruct));
}

附带说明一下,我认为这里不需要指针数组。 为什么不简单地为 5 个testStruct分配足够的空间(即, neato变成一个testStruct* )并将该指针的地址传递给初始化它的 function?

您没有为必须添加的所有结构本身mallocing空间

for(int i = 0; i < 5; i++) {
    neato[i] = malloc(sizeof(testStruct));
}

在你 malloc neato 之后。 您还应该检查 malloc 的返回值是否为NULL ,以确保 malloc 通过。

您分配了指针数组,但没有为这些指针分配有效地址。

如果只想创建动态数组,只需使用指向结构的指针:

testStruct *neato;
neato = malloc( sizeof(testStruct) * 5);
scanf("%d", &neato[0].test1);

暂无
暂无

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

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