[code=C/C++][/code]
/*声明结构体*/
typedef struct Node
{
QString Name;
QString MobileNumber;
QString HomeNumber;
QString Mail;
QString Fax;
QString Address;
struct Node *next;
}node;
node *s = NULL;
s = (node *)malloc(sizeof(node));
s->Name = nameLine->text();
s->MobileNumber = mobileNumberLine->text();//每次读到这以后就会出现段错误,将这句往后都屏蔽就没事。。找好久了没发现为什么,请高手帮忙
s->HomeNumber = homeNumberLine->text();
s->Mail = EmailLine->text();
s->Fax = postNumberLine->text();
s->Address = addressText->toPlainText();
------解决方案--------------------
多半是因为空指针,仔细查一下吧。
------解决方案--------------------
s->MobileNumber = mobileNumberLine->text();
在这句前面添加:
if(mobileNumberLine == NULL) {
}
------解决方案--------------------
先看看mobileNumberLine是不是空。
------解决方案--------------------
if (mobileNumberLine == NULL)
加它也不可以吗?
------解决方案--------------------
把帖子移动到c/c++板块->qt开发区问问.
------解决方案--------------------
QT是搞诺基亚的吧?
------解决方案--------------------
node *s = NULL;
s = (node *)malloc(sizeof(node));
这个分配方法是错的
要用s = new node;
------解决方案--------------------
我在Linux下QT3做了试验,没有出现任何问题,程序通过,运行正常。
关于new 和malloc,我想说的是,new确实是调用了malloc和类的构造函数,但是这个,编译器为struct Node自动添加的默认构造函数,肯定只是调用各QString成员变量的默认构造函数。
注意:s->MobileNumber = mobileNumberLine->text()
这里肯定会调用QString的赋值构造函数,我没有看QT的源码,但是我觉得QT这种成熟的库,会在赋值函数里对存储空间进行检查和扩充,所以这里不应当有问题。
至于这个段错误的问题,究竟是怎么发生的,我觉得可以通过多次地屏蔽代码来调试。