【发布时间】:2014-11-12 21:34:44
【问题描述】:
typedef struct
{
int* data;
unsigned int len;
}intarr_t;
intarr_result_t intarr_push( intarr_t* ia, int val )
{
intarr_t* tmp;
// Warning too few arguments to function ‘realloc’
tmp = realloc(intarr_t, (ia-> len+1)*sizeof *intarr_t); // problem here..
ia = tmp;
ia->data[ia->len+1] = val;
for (eye = 0; eye < 30; eye++)
{
// Warning passing argument 1 ointarr.c:140:17: error: expected expression before ‘intarr_t’
tmp = realloc(intarr_t, (ia->len+1)*sizeof(intarr_t));f ‘free’ makes pointer from
//integer without a cast
free(tmp->data[eye]);
free(tmp);
}
}
我目前尝试编写一个程序来将一个值附加到传递给我的数组上,但无论我做什么,这些小问题似乎都会发生。有人可以向我解释这里的根本问题以及如何解决它吗?
我已经尝试了大家的建议,但是我得到了这个错误:
intarr.c:140:17: error: expected expression before ‘intarr_t’
tmp = realloc(intarr_t, (ia->len+1)*sizeof(intarr_t));
^
intarr.c:140:17: error: too few arguments to function ‘realloc’
【问题讨论】:
-
给定这一行: tmp = realloc(intarr_t, (ia-> len+1)*sizeof *intarr_t); realloc 的第一个参数是指针变量,而不是结构类型。这部分: sizeof *intarr_t 将始终为 4(指针的大小)另外,需要检查生成的 tmp 变量以确保 realloc 成功tmp 不包含 NULL
-
这一行: intarr_result_t intarr_push( intarr_t* ia, int val ) 1) intarr_result_t 未在提供的代码中定义。然而真正的问题是代码应该返回一个完整的 intarr_result_t。这很少是一个好主意。返回指向 intarr_result_t 实例(不在堆栈上)的指针会更好
标签: c pointers memory-management casting warnings