尝试在指向结构的指针内分配数组时出现分段错误

Segmentation fault when attempting to malloc arrays inside pointer to struct

我正在尝试为结构中的数组分配内存,如下所示:

    typedef struct
    {
        int a;
        int *b;
    } MyStruct;

我有一个像这样初始化结构的函数:

    void init( MyStruct * myStruct, int size )
    {
        myStruct = malloc( sizeof( MyStruct ) );
        myStruct->a = size;
        myStruct->b = malloc( size * sizeof( int ) );
    }

但是当我尝试为数组 b 内的字段分配内存时,出现分段错误

    int main( void )
    {
        int i, size = 5;
        MyStruct *myStruct;
        init( myStruct, size );

        for( i = 0; i < size; i++ )
        {
            myStruct->b[i] = malloc( sizeof( int ) ); //fails here
            myStruct->b[i] = i*i;
        }
    }

我找了好几遍,还是没能解决这个问题。 有人知道为什么会这样吗?

c 中传递的参数是按值调用的,因此在 init 函数中分配的内存永远不会分配给 main 中的 myStruct 指针变量,而只会分配给它的传递到 init.

的副本

首先,您已经分配了五个 "slots" 来将整数放在那里,那么为什么还需要在循环内再次调用 malloc?其次,没有理由创建指向 MyStruct 的指针。所以,第三,不需要为整个结构分配内存。

void init( MyStruct * myStruct, int size )
{
    myStruct->a = size;
    myStruct->b = malloc(size * sizeof( int ));
}

int main(int argc, char *argv[])
{
    int i, size = 5;
    MyStruct myStruct;
    init( &myStruct, size );

    for( i = 0; i < size; i++ )
    {
        myStruct.b[i] = i*i;
    }

    free(myStruct.b);

    return 0;
}