qt 调试时出现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt 调试时出现相关的知识,希望对你有一定的参考价值。
启动调试器...
调试开始
limiting remote suggested packet size (131072 bytes) to 16384
Could not load shared library symbols for 4 libraries, e.g. C:\sys\bin\QtCore.dll.
Do you need "set solib-search-path" or "set solib-absolute-prefix"?
1、查一下,是不是定义了指针,没有为指针赋初值,或者数组下标越界。
2、Debug一下,设置断点,找出是哪里出现段错误了,再找原因。追问
点调试开始就出这个错,在哪设置断点都没用。
指针用的非常多,数组也无数。
Could not load shared library symbols for 4 libraries, e.g. C:\sys\bin\QtCore.dll.
可能是找不到我用的库吧?
重新装一下试试吧
参考技术A 指针错误或者数组越界qt调试时出现的错误:The inferior stopped because it received a signal from the Operating System.
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string>
#include<cstring>
#include<vector>
using namespace std;
class stu
private:
string id;
string name;
string tel;
public:
void display();
void get();
;
void stu::display()
cout<<id<<name<<tel<<endl;
void stu::get()
string name4;
cin>>name4;
fstream infile("data1.txt",ios::in);
if (!infile)
cout<<" 文件打开失败! ";
exit(1);
stu p1;
infile.read(reinterpret_cast<char*>(&p1),sizeof(stu));
while(!infile.eof())
if(p1.name.compare(name4)==0)
p1.display();
break;
infile.read(reinterpret_cast<char*>(&p1),sizeof(stu));
int main()
stu a;
a.get();
a.display();
return 0;
网上查了据说是指向空指针的问题,但我实在没找到,求各位大大解惑!
if(p1.name.compare(name4)==0)
你这个程序是要验证什么? 用指针访问私有成员?
问题出在:
infile.read(reinterpret_cast<char*>(&p1),sizeof(stu));p1是类对象,被reinterpret_cast后,读入数据口,整个类对象的内存空间都被冲毁了。 类的对象,在内存空间中的布局包括成员及成员函数的指针(即函数名称所在的地址),一旦被当作普通指针进行了数据拷贝(上面的read),那么成员函数的地址也被改变了。后面p1.name.compare
(...),需要调用成员函数,而此时成员函数地址也被覆盖,当然也就成了野指针,程序因此崩溃了。
这也就是c++应用中,不能对class pointer实施memset()操作的原因。
正常的数据读入应该是:
infile >> p1.id >> p1.name >> p1.tel;但id,name,tel都是私有,应该不能成功。
改成:
infile >> id >> name >> tel;就可以了,但你定义的stu p1就失去了意义。。。。。 还是那句话,程序的目的是什么?
我是不停想从文件中直接读取一个类的数据到p1中,然后比较p1.name和name4,找到和name4一样的,说白了就是查询,p1只是个临时对象
如果这样不行,那该怎样一次性读取一个类的数据到临时变量中呢?
如果你只是要作比较,那么修改你的代码如下即可 【注:假设data1.txt的格式是 name id tel 一行这样的排列】:
void stu::newget()string name4;
cin>>name4;
fstream infile("data1.txt",ios::in);
if (!infile)
cout<<" 文件打开失败! ";
exit (1);
while ( !infile.eof() )
infile >> id >> name >> tel;
if ( name.compare(name4) == 0 ) // 这是大小写敏感的比较!
display();
break;
infile.close();
a) 你的get函数已经是类的成员了,不要再用一个临时类对象了,你的成员都是“私有”的,一个临时类的变量,无法直接存取这些私有成员(除非你的类提供访问接口,诸如: getName(),getId(), getTel())
b) 类中的display只为了get服务? 如果是这样,没必要public;你的主程序中get之后又display是什么用意呢(不是再get中已判断了吗? name匹配,才display,否则不应有输出才对)?
来自:求助得到的回答 参考技术A 可能是你在头文件.h里面定义了一个指针,然后有没有在主函数里面呢new出来,就直接使用了这个指针例如:
widget.h
QDialog *login_dialog;
widget.cpp
//login_dialog = new QDialog; (忘了此步操作)
login_dialog->show();
忘了上面的new操作就会出现这种情况,使用了一个野指针。当然这只是其中一种可能,但是这种野指针的错误最为常见。
以上是关于qt 调试时出现的主要内容,如果未能解决你的问题,请参考以下文章
让 gprof 从 Qt 调试应用程序读取 gmon.out 输出时出现问题
qt调试时出现的错误:The inferior stopped because it received a signal from the Operating System.