gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:49:55 26 4
gpt4 key购买 nike

该函数获取一个句子,需要在“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

最佳答案

仔细看看这两行:

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

首先,您分配内存并使 temp 指向该内存。在下一行中,您重新分配 temp 指向其他位置。

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

另请注意,通过执行例如

sentence[m] = sentence[n];

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

关于c - 在 c 中重新分配时出错(异常 trown (ucrtbased.dll)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41520404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com