读书人

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

发布时间: 2013-01-06 15:44:48 作者: rapoo

新手求助,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循坏的问题
你用的数据类型存不下那么大数据

读书人网 >C++

热点推荐