C语言 为什么 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);

为什么即使重新分配了相同的内存?

op_temp不是

指针,只是一个字符值。你应该写:

char *op, *op_temp;

char* op;
char* op_temp;

根据 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;

这是因为op_temp不是指针。您必须将星号*放在要作为指针的每个变量名称旁边。喜欢这个:

char *op, *op_temp;

我建议使用typedef's来消除此类错误,因为它们编码正确的指针类型,如下所述:

typedef char *charp;
charp op, op_temp;

将上述opop_temp声明为指针 o 类型 char

相关内容

  • 没有找到相关文章

最新更新