首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手,c++一个关于线性链表的有关问题

2013-01-06 
新手求助,c++一个关于线性链表的问题#include iostream#include fstream#includecstdio#includemal

新手求助,c++一个关于线性链表的问题


#include <iostream>
#include <fstream>
#include<cstdio>
#include<malloc.h>
#include<string.h> 
#include <stdlib.h>

using namespace std;

typedef struct LNode
{
    string line;//数据是一组字符串
    struct LNode *next;
}LNode,*LinkList;

void Createlist_L(LinkList &L,int n)//n为链表长度
{
   L=(LinkList)malloc(sizeof(LNode));
   L->next=NULL;
   LinkList p,q=L;
   ifstream ifs("stock11.txt");//该文件中存储了18组数据,每组一行
   for(int i=1;i<=n;++i)
   {
       p=(LinkList)malloc(sizeof(LNode));
       getline(ifs,p->line);
            cout<<i<<endl;//调试语句
       cout<<p->line<<endl;//调试语句
       q->next=p;p->next=NULL;q=q->next;
   }
   ifs.close();
}
int main()
{
    LinkList L;
    Createlist_L(L,100);
    return 0;
}


这个线性链表从文件中读取18组数据,但是在运行中发现只能读到第11个就出现了错误关闭,代码0xc000005,偶尔出现读到第四个就错误关闭的情况。。这是为什么?

另外原题是一个大约有170w组数据的文档(140M),现在是拿少量数据测试,请问线性链表或者数组可以存储这么多的数据吗?
[解决办法]
for循环里面的p指针内存没释放,暂时就看到这个问题,待会去编译器帮你调试下
[解决办法]
问题应该是这样的
string不是内置数据类型,因此用malloc时sizeof(LNode)无法确定其大小,因为不知道到string多大,改为用new 分配就可以了
p=new LNode;

.....
delete p;

至于为啥malloc不行呢我暂时也不是很清楚,等高手来解答
[解决办法]
string 中重载了new操作符,而没有malloc,所以struct中有string时不要用malloc去分配
[解决办法]
数据溢出,换个大一点的数据类型存数据,不是for循坏的问题
你用的数据类型存不下那么大数据

热点排行