1
我有一個程序讀取文本文件並將其分離爲章節和段落結構。Glibc損壞的雙鏈表
struct paragraph
{
char** lines;
int numLines;
};
struct chapter
{
struct paragraph** paragraphs;
int numParagraphs;
};
struct book
{
struct chapter** chapters;
int numChapters;
};
這裏是有問題的代碼片段,特別是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;
稱爲此代碼段內的功能應能正常工作,至少我指望這個事實。這是一個存在管理不善的問題。感謝您的任何建議!
我應該提到,它讀通過前幾章,然後它得到的錯誤。
實際上,我無法看到任何「[double-]鏈表」在哪裏.. – user2864740
在if語句中執行realloc時會出現此錯誤。它看起來像是在內存或者類似的東西在閱讀前幾章之後。但是,有趣的是,刪除realloc語句完全允許我的程序讀取整個book.txt文件,但它不能正確存儲所有內容...。 – user2893045
內存管理結構在realloc()之前已損壞。在valgrind下運行該程序。 – ninjalj