我正在尝试使用malloc()函数使用下面定义的ADT创建一个整数数组。我希望它返回一个指向新分配的intarr_t类型的整数数组的指针。如果它不起作用 - 我希望它返回一个空指针。
这是我到目前为止 -
//The ADT structure
typedef struct {
int* data;
unsigned int len;
} intarr_t;
//the function
intarr_t* intarr_create( unsigned int len ){
intarr_t* ia = malloc(sizeof(intarr_t)*len);
if (ia == 0 )
{
printf( "Warning: failed to allocate memory for an image structure\n" );
return 0;
}
return ia;
}
我们系统的测试给了我这个错误
intarr_create(): null pointer in the structure's data field
stderr
(empty)
我在哪里出错?
答案 0 :(得分:1)
可以从错误消息intarr_create(): null pointer in the structure's data field
推断出,每个结构的data
个字段都应该被分配。
intarr_t* intarr_create(size_t len){
intarr_t* ia = malloc(sizeof(intarr_t) * len);
size_t i;
for(i = 0; i < len; i++)
{
// ia[len].len = 0; // You can initialise the len field if you want
ia[len].data = malloc(sizeof(int) * 80); // 80 just for example
if (ia[len].data == 0)
{
fputs("Warning: failed to allocate memory for an image structure", stderr);
return 0;
}
}
return ia; // Check whether the return value is 0 in the caller function
}