简体   繁体   中英

Pointer to a Pointer to a Structure and malloc memory for array

I'm creating a pointer to a pointer to a structure to create a dynamic array with malloc in C, but I get a segmentation fault calling the struct array. Here is a quick rundown of my code:

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

I tried other calls like (*neato)[0].test1 and all result in segmentation fault. This is obviously not the proper way to do this or my GNU compiler is seriously outdated.

You've allocated enough memory for 5 pointers. You have not however initialized the pointers, so they are garbage. Allocate the pointers and then proceed to initialize each pointer.

int elems = 5;

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

On a side note, I don't see a need for an array of pointers here. Why not simply allocate enough space for 5 testStruct s (ie, neato becomes a testStruct* ) and pass the address of that pointer to the function that initializes it?

you aren't mallocing space for all the structures themselves you have to add

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

After you malloc neato. Also you should check your return value from malloc for NULL to make sure malloc passed.

You allocated array of pointers, but did not assign valid address to these pointers.

If you only want to create dynamic array, use just pointer to the struct:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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