该功能获得了一个并且需要在' n'之间进行替换。第一句话。 当它进入第一次重新分配时,程序停止并显示错误。 我尝试了很多句子组合,我要求的新记忆比存在的记忆大。
我的职能:
void Reverse(char **sentence, int n)
{
int m;
char *temp;
for (m = 0; m < n; m++, n--)
{
temp = (char*)malloc(strlen(sentence[m]) * sizeof(char));
temp = sentence[m];
sentence[m] = (char*)realloc(sentence[m], strlen(sentence[n]) * sizeof(char));
sentence[m] = sentence[n];
sentence[n] = (char*)realloc(sentence[n], strlen(temp) * sizeof(char));
sentence[n] = temp;
free(temp);
printf("%s ", sentence[m]);
}
}
答案 0 :(得分:2)
仔细看看这两行:
temp = (char*)malloc(strlen(sentence[m]) * sizeof(char));
temp = sentence[m];
在第一个中你分配内存并让temp
指向那个内存。在下一行中,您重新分配 temp
指向其他位置。
您也可以为重新分配执行此操作。
另请注意,例如。
sentence[m] = sentence[n];
复制指针而不是指针指向的内存内容。它是浅副本。如果您修复此问题以复制实际内容(并且具有深副本),那么您必须记住C中的字符串由strlen
未计算的额外字符终止。例如,字符串"hello"
实际上是终结符的六个字符。您也必须为此终结符分配空间。