【问题标题】:C Error - Cannot find bounds of current functionC 错误 - 找不到当前函数的边界
【发布时间】:2016-04-25 04:32:27
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

typedef struct dictionary_entry
{
    char *eng;
    char *gr;
} term;

len = 0;
term *terms, *trm;
terms = (term*)malloc(0);
char temp1[50], temp2[50];
trm = (term*)malloc(0);
trm->eng = (char*)malloc(0);
trm->gr = (char*)malloc(0);
FILE *in = fopen("dictionary.txt", "r");
while(feof(in) == 0)
{
    fscanf(in, "%s %s\n", temp1, temp2);
    trm = (term*)realloc(trm, sizeof(term));
    trm->gr = (char*)realloc(trm, sizeof(char) * strlen(temp1));
    trm->eng = (char*)realloc(trm, sizeof(char) * strlen(temp2));
    strcpy(trm->gr, temp1);
    strcpy(trm->eng, temp2);
    add(&terms, trm, &len);
}
free(trm->eng);
free(trm->gr);
free(trm);
fclose(in);

我试图从我的文件中读取一组单词(例如单词翻译)来创建字典,但我一运行程序就崩溃了。调试器将我指向 realloc 函数,并出现一条错误消息。消息是

[debug]找不到当前函数的边界

问题似乎与我正在使用的 realloc 函数有关。有没有人遇到过这个问题,如果有,我该如何解决?

我正在使用 Code::Blocks。

【问题讨论】:

  • 检查mallocreallocfopenfscanf的返回值,每次-总是!请阅读this about feof
  • Harris, AgapwIesu 这只是程序的一部分,我只是忘记在此处包含 main() 函数。唯一的问题是 realloc() 函数

标签: c function file realloc


【解决方案1】:

你没有用这个重新分配正确的结构字段

trm->gr = (char*)realloc(trm, sizeof(char) * strlen(temp1));
trm->eng = (char*)realloc(trm, sizeof(char) * strlen(temp2));

我建议应该是

trm->gr = (char*)realloc(trm->gr, sizeof(char) * strlen(temp1));
trm->eng = (char*)realloc(trm->eng, sizeof(char) * strlen(temp2));

我注意到您正在使用 strlen 来调整大小,因此您可能还需要 +1 作为字符串终止符,这(也简化了)将是

trm->gr = realloc(trm->gr, strlen(temp1) + 1);
trm->eng = realloc(trm->eng, strlen(temp2) + 1);

但是你也应该经常检查函数的返回值。

【讨论】:

  • 我已更正,但尝试调试时仍然出现相同的错误。
  • “唯一的问题是 realloc() 函数” 你不相信吗?如果你不知道是什么导致了错误,你就不知道什么是相关的。这就是为什么建议发布Minimal, Complete, and Verifiable example
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 2014-09-08
  • 2011-01-26
相关资源
最近更新 更多