为什么realloc失败了临时指针

时间:2015-01-29 10:32:13

标签: c pointers char malloc realloc

以下成功:

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);

为什么即使重新分配同一块内存呢?

4 个答案:

答案 0 :(得分:3)

op_temp不是指针,只是一个char值。你应该写:

char *op, *op_temp;

char* op;
char* op_temp;

答案 1 :(得分:3)

根据realloc()

man page
  

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