读书人

QT高手帮小弟看看下面这段代码!感激不

发布时间: 2012-02-17 17:50:42 作者: rapoo

QT高手帮小弟看看下面这段代码!!感激不尽
[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这种成熟的库,会在赋值函数里对存储空间进行检查和扩充,所以这里不应当有问题。

至于这个段错误的问题,究竟是怎么发生的,我觉得可以通过多次地屏蔽代码来调试。

读书人网 >QT开发

热点推荐