当前位置: 代码迷 >> QT开发 >> QT高手帮小弟看看下面这段代码!感激不尽,该如何处理
  详细解决方案

QT高手帮小弟看看下面这段代码!感激不尽,该如何处理

热度:256   发布时间:2016-04-25 05:11:56.0
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这种成熟的库,会在赋值函数里对存储空间进行检查和扩充,所以这里不应当有问题。

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