尝试在指向结构的指针内分配数组时出现分段错误
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;
}
我正在尝试为结构中的数组分配内存,如下所示:
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;
}