#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。
答案 0 :(得分: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);
但是你也应该总是检查函数的返回值。