作者homer00 (有事来信)
看板C_and_CPP
标题[问题] structure一问
时间Mon May 11 20:36:48 2009
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
using namespace std;
typedef struct node
{
string name;
int number;
struct node* prev;
struct node* link;
} NODE;
int main()
{
string geTmp;
string strTmp;
string inTmp;
NODE* list;
string filenameR = "phone.txt";
ifstream inFile;
inFile.open(filenameR.c_str());
while( getline(inFile, geTmp) )
{
list = (NODE*)malloc(sizeof(NODE));
stringstream token(geTmp);
while(1)
{
token>>strTmp;
if(token.fail())
{
break;
}
list->name = strTmp;
token>>inTmp;
list->number = atoi( inTmp.c_str() );
cout<<list->number<<endl;
cout<<strTmp<<endl;
}
}
return 0;
}
若将黄色的部份盖掉 程式就不会出问题
觉得蛮怪的 把读到东西存成string
然後assign给structure里面的string
data type一样 却会当掉....不知道原因为何ˊ ˋ"
请问有人能帮忙解惑吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.243.94
1F:推 legnaleurc:Use `operator new` instead of `malloc` 05/11 20:44
2F:→ homer00:好像还是会当...? 05/11 21:00
3F:推 littleshan:好像?你试过了吗? 05/11 22:07
4F:推 littleshan:另外这支程式会 memory leak 05/11 22:15
5F:→ kkroy:已经找到问题了,因为list是动态记忆体规画, 05/11 22:17
6F:→ kkroy:list->name 每次读的字串大小不尽相同 05/11 22:18
7F:→ kkroy:compile会过,但是程式跑会当掉。 05/11 22:18
8F:→ adrianshum:不知道你在说什麽, name 是 std::string,它的=operator 05/12 11:15
9F:→ adrianshum:根本就预计你会 assgin 不同长度的东西进去 05/12 11:15
10F:→ homer00:试过 会当 05/12 13:27
11F:推 littleshan:你档案多大?有释放记忆体吗?有检查是否回传NULL吗? 05/12 13:37
12F:→ sunneo:喔 会当,是吧 05/12 21:28
13F:→ sunneo:我猜因为你看不懂一楼的解释 所以就没做了 於是另外猜测 05/12 21:42
14F:→ homer00:暂时有其他比较low的方法可以替代 加上作业有时效性 05/12 21:55
15F:→ homer00:我等忙完再来讨论 ˊˋ" 05/12 21:56
16F:→ homer00:是看不懂一楼的建议没错 还没去找语法 05/12 21:57
17F:→ sunneo:一楼的意思是list = (NODE*)malloc(sizeof(NODE)); 05/12 21:59
18F:→ sunneo:改成list = new NODE; 05/12 21:59
19F:→ sunneo:因为malloc只配置空间 所以里面的std::string内容是乱的 05/12 22:01