在 c 中重新分配时出错(异常生成(ucrtbased.dll))
Error when realloc in c (exception trown (ucrtbased.dll))
该函数得到一个句子,需要在 'n' 第一个单词之间进行替换。
当它到达第一个 realloc 时,程序停止并显示错误。
我尝试了很多句子组合,我要求的新内存比现有内存大。
我的函数:
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]);
}
}
Error
仔细看看这两行:
temp = (char*)malloc(strlen(sentence[m]) * sizeof(char));
temp = sentence[m];
首先分配内存并使 temp
指向该内存。在下一行中,您 重新分配 temp
以指向其他地方。
您也为重新分配执行此操作。
另请注意,通过执行例如
sentence[m] = sentence[n];
你复制了一个指针,而不是指针指向的内存内容。这是一个浅副本。如果您修复此问题以复制实际内容(并有一个 deep 副本),那么您必须记住 C 中的字符串以一个不被 strlen
计算的额外字符终止。例如,字符串 "hello"
实际上是 六个 字符长,带有终止符。您还必须为此终结符分配 space。
该函数得到一个句子,需要在 'n' 第一个单词之间进行替换。 当它到达第一个 realloc 时,程序停止并显示错误。 我尝试了很多句子组合,我要求的新内存比现有内存大。
我的函数:
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]);
}
}
Error
仔细看看这两行:
temp = (char*)malloc(strlen(sentence[m]) * sizeof(char));
temp = sentence[m];
首先分配内存并使 temp
指向该内存。在下一行中,您 重新分配 temp
以指向其他地方。
您也为重新分配执行此操作。
另请注意,通过执行例如
sentence[m] = sentence[n];
你复制了一个指针,而不是指针指向的内存内容。这是一个浅副本。如果您修复此问题以复制实际内容(并有一个 deep 副本),那么您必须记住 C 中的字符串以一个不被 strlen
计算的额外字符终止。例如,字符串 "hello"
实际上是 六个 字符长,带有终止符。您还必须为此终结符分配 space。