在 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。