C ++从文件读取到链接列表,给出了EXC_BAD_ACCESS

时间:2012-10-07 19:44:54

标签: c++ linked-list exc-bad-access getline

大家好我试图将旧代码从C转移到C ++进行分配....我必须手工实现链接列表,所以我不能使用STL容器,否则我已经完成了这个...

这是我的链表:

#include <iostream> 
#include <string>
#include <fstream>
using namespace std;


struct Video { 
char video_name[1024];      //  video name
int ranking;                // Number of viewer hits
char url[1024];             //  URL
Video *next;  // pointer to Video structure
}  *head = NULL;        // EMPTY linked list

这里是读入代码:

void load()
{
struct Video *temp;
temp = (Video*)malloc(sizeof(Video)); //allocate space for node 
temp = head;
ifstream myfile ("Ranking.dbm");
if (myfile.is_open())
{
    string line;
    while ( myfile.good() )
    {

        myfile.getline(temp->video_name,1024);
        myfile >> temp->ranking;
        getline(myfile, line); // need to skip 'ranking's
                                // unread new-line
        myfile.getline(temp->url,1024);
        temp = temp->next; 

    }
    head = NULL;
    myfile.close();
}

else cout << "Unable to open file"; 

return ;

}

它正在从文本文件Ranking.dbm中读取,如下所示:

bagheera
20
bagheera.com
sushi
60
sushi.com
wicket
99
wicket.com
teek
100
teek.com

基本上每组3行应加载到Video结构中,该结构将是链表中的新节点。

由于我无法控制的情况,我正在使用XCode进行此项目。我的问题是为什么我得到这个错误。我以为EXC_BAD_ACCESS主要是一个Objective-C错误......?

1 个答案:

答案 0 :(得分:1)

在load()函数中,您分配单个节点,读取数据以填充节点,然后分配temp = temp->next。但是,temp->next未初始化,因此很可能指向随机地址。