【发布时间】:2013-12-05 13:36:47
【问题描述】:
我有一个程序可以读取文本文件并将其分成章节和段落结构。
struct paragraph
{
char** lines;
int numLines;
};
struct chapter
{
struct paragraph** paragraphs;
int numParagraphs;
};
struct book
{
struct chapter** chapters;
int numChapters;
};
这是有问题的代码 sn-p,特别是 realloc() 语句:
//int numChapters = -1;
//char**** book = (void*)0;
struct book* books = malloc(sizeof(struct book*));
books->chapters = malloc(sizeof(struct chapter));
books->numChapters = -1;
//char*** nextChapter;
struct chapter* nextChapter = malloc(sizeof(struct chapter));
while ( (nextChapter = readChapter(bookFile))->paragraphs[0] )
{
if (++(books->numChapters) > 0)
{
books = realloc(books, sizeof(struct chapter*)*books->numChapters);
books->chapters[books->numChapters - 1] = nextChapter;
}
}
books = realloc(books, sizeof(struct chapter*)*books->numChapters);
books->chapters[books->numChapters] = (void*)0;
return books;
在这段代码 sn-p 中调用的函数应该可以正常工作,至少我相信这个事实。这一定是内存管理不善的问题。感谢您的建议!
我应该提一下,它通读了前几章,然后出现了错误。
【问题讨论】:
-
实际上,我没有看到任何“[双]链表”在哪里..
-
在 if 语句中执行 realloc 时会出现该错误。阅读前几章后,它似乎内存不足或类似的东西。然而,有趣的注意事项是,完全删除 realloc 语句可以让我的程序读取整个 book.txt 文件,但它并不能正确存储所有内容......根本。
-
内存管理结构在 realloc() 之前已损坏。在 valgrind 下运行程序。