以下成功:
char *op, op_temp;
op = malloc(len+1);
op_temp = op;
op = realloc(op, ++len);
而以下导致运行时错误:
char *op, op_temp;
op = malloc(len+1);
op_temp = op;
op = realloc(op_temp, ++len);
为什么即使重新分配同一块内存呢?
答案 0 :(得分:3)
op_temp不是指针,只是一个char值。你应该写:
char *op, *op_temp;
或
char* op;
char* op_temp;
答案 1 :(得分:3)
根据realloc()
void * realloc(void * ptr,size_t size);
所以,第一个参数应该是char *
。
OTOH,在你的代码中,
op = realloc(op, ++len);
此处op
的类型为char *
,有效。但
op = realloc(op_temp, ++len);
此处op_temp
的类型为char
。
更改
char *op, op_temp;
到
char *op = NULL, *op_temp = NULL;
答案 2 :(得分:0)
这是因为op_temp
不是指针。您必须将星号*
放在要作为指针的每个变量名旁边。像这样:
char *op, *op_temp;
答案 3 :(得分:0)
我建议使用typedef's
来消除这些错误,因为它们编码正确的指针类型,如下所述:
typedef char *charp;
charp op, op_temp;
以上op
& op_temp
声明为指针char
。