在c中重新分配时出错(异常trown(ucrtbased.dll))

时间:2017-01-07 10:29:56

标签: c realloc

该功能获得了一个并且需要在' 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]);
    }
}

Error

enter image description here

1 个答案:

答案 0 :(得分:2)

仔细看看这两行:

temp = (char*)malloc(strlen(sentence[m]) * sizeof(char));
temp = sentence[m];

在第一个中你分配内存并让temp指向那个内存。在下一行中,您重新分配 temp指向其他位置。

您也可以为重新分配执行此操作。

另请注意,例如。

sentence[m] = sentence[n];

复制指针而不是指针指向的内存内容。它是副本。如果您修复此问题以复制实际内容(并且具有副本),那么您必须记住C中的字符串由strlen未计算的额外字符终止。例如,字符串"hello"实际上是终结符的六个字符。您也必须为此终结符分配空间。