【问题标题】:Error when realloc in c (exception trown (ucrtbased.dll))在 c 中重新分配时出错(异常 trow (ucrtbased.dll))
【发布时间】:2017-01-07 10:29:56
【问题描述】:

函数得到一个句子,需要在'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

【问题讨论】:

  • 你发现了什么错误?
  • 除非你真的知道自己在做什么,否则用strlen(x) 分配足够的空间太短了。

标签: c realloc


【解决方案1】:

仔细看看这两行:

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

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

您也这样做是为了重新分配。

还请注意,通过做例如

sentence[m] = sentence[n];

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

【讨论】:

  • 所以实际上我需要制作它 (strlen(x)+1) 并使用 strcpy 或其他东西?
猜你喜欢
  • 2017-04-12
  • 2011-03-02
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多