所以我用c编写,我有一个字符指针数组,我用它作为动态数组(char * chat [CHAT_ROWS]),我还有一个复制一个字符数组的函数到另一个字符数组(下面),产生错误的Copy_String()的特定调用使用chat [CHAT_ROWS - 1]作为string_out。
我收到错误"损坏的双链表"当我尝试为一个长度超过30个字符的数组提供string_in时。该错误似乎来自高级和中级之间第二次调用realloc()。
void Copy_String(char *string_out, char *string_in)
{
int i;
printf("first\n");
string_out = (char *)realloc(string_out, 0);
i = 0;
while(string_in[i] != '\0')
{
printf("high\n");
string_out = (char *)realloc(string_out, i * sizeof(char));
printf("mid\n");
string_out[i] = string_in[i];
printf("low\n");
i += 1;
}
string_out = (char *)realloc(string_out, i * sizeof(char));
string_out[i] = '\0';
printf("end\n");
return;
}
答案 0 :(得分:1)
如果在函数中重新分配字符串指针参数,则必须返回它。如果不这样做,传入的参数很可能在函数返回后无效。
答案 1 :(得分:-1)
这是一种非常慢的复制字符串的方法,因为你在复制每个字符之前分配内存。
无论如何,你的问题在这里:
string_out = (char *)realloc(string_out, i * sizeof(char));
请注意,在第一次互动中," i"将为零,因此您将分配" 0字节",结果为null。最后,你写为null。
所以用以下代码替换代码:
string_out = (char *)realloc(string_out, (i + 1) * sizeof(char));
应该工作。
另外,正如其他人所说,你应该将string_out返回给调用者,否则你将失去所有的工作。