• 7270阅读
  • 15回复

学习QT中遇到奇怪的问题~请知道的朋友解答一下谢谢了 [复制链接]

上一主题 下一主题
离线icove
 

只看楼主 倒序阅读 楼主  发表于: 2010-07-27
书中那个FindDialog的例子在编译的时候遇到了一些问题。我是在VS2008环境下编译的
按照书上输入代码后 通过qmake -project,qmake,nmake 正确生成了执行文件
但是这个文件却怎么不能运行。。。检查了执行文件运行所需的文件及路径 都是正确的,
但是就是无法运行。
更奇怪的是,我通过VS2008直接创建的QT工程,却能正常的编译运行。

后来我在mingw编译FindDialog这个例子,却没有任何问题。

知道的朋友请解答一下,谢谢啦

备注:用mingw 和 vs2008 时 各个相关路径 我都检查了的 应该没有问题;

附上 FindDialog 的代码
FindDialog.rar (2 K) 下载次数:6
离线dbzhang800

只看该作者 1楼 发表于: 2010-07-27
1. 不能运行具体现象是什么?
2.检查依赖文件用的什么呢?  Dependency Walker ?
离线icove

只看该作者 2楼 发表于: 2010-07-27



这个是出错的提示
离线icove

只看该作者 3楼 发表于: 2010-07-27
另外 家里和单位的电脑 同样的问题。。。都是 mingw编译的可以运行,然后VS2008可以正确编译和生成exe文件,但是 VS2008编译的就是不能运行
离线dbzhang800

只看该作者 4楼 发表于: 2010-07-27
报这么明显的内存错误你都不去调试自己的程序,有点不应该。

看了一下:你这变量都没初始化
leftLayout->addWidget(backwardCheckBox);

离线icove

只看该作者 5楼 发表于: 2010-07-28
大哥~,这个我在mingW下面编译的运行就没有任何问题,如果是初始化问题的话 那么不管什么编译器编译都会出问题呀
不过我先检查一下 初始化问题~
谢谢老
离线icove

只看该作者 6楼 发表于: 2010-07-28
确实是这个问题。。。
这个是GCC编译器可以自动忽略这些问题么??
因为mingW编译的能正常运行 我就没去检查代码了。。。。


谢谢这位大哥咯!
离线dbzhang800

只看该作者 7楼 发表于: 2010-07-28
引用第6楼icove于2010-07-28 09:51发表的  :
确实是这个问题。。。
这个是GCC编译器可以自动忽略这些问题么??
因为mingW编译的能正常运行 我就没去检查代码了。。。。
.......

可以运行 和  程序没bug 是两个不同概念。

更何况,在 Mingw 编译后运行时,你不觉得界面上少东西吗?

再就是,不止 Mingw,即使在VS下,当你采用 release 模式时,它同样可以运行。但这不能说明程序没bug!
离线juan34429823
只看该作者 8楼 发表于: 2010-07-28
我用QT运行你的程序内容,好像没出错,附件是我运行的整个程序文件,你再运行看行不行。VS2008运行我就不清楚了,我是菜鸟
附件: FindDialog.rar (6 K) 下载次数:7
离线icove

只看该作者 9楼 发表于: 2010-07-28
回 7楼(dbzhang800) 的帖子
^_^谢谢
我现在想不明白的是 为什么mingW下编译运行是没问题的,而VC2008下如果没有初始化backwardCheckBox 就会出错

这个是编译器的特性吗? GCC可以自动的去忽略没有初始化又使用了的变量吗??

我编译构建 都是 debug模式的
离线dbzhang800

只看该作者 10楼 发表于: 2010-07-28
Re:回 7楼(dbzhang800) 的帖子
引用第9楼icove于2010-07-28 11:24发表的 回 7楼(dbzhang800) 的帖子 :
^_^谢谢
我现在想不明白的是 为什么mingW下编译运行是没问题的,而VC2008下如果没有初始化backwardCheckBox 就会出错
这个是编译器的特性吗? GCC可以自动的去忽略没有初始化又使用了的变量吗??
.......


内存错误 绝大多数 都会隐藏很深。C、C++难就难在要自己管理内存这个问题上。所以调试程序才非常非常辛苦。

而 debug 模式时,编译器会给你添加大量的宏比如 assert 等,以及给你未赋值的变量赋一些值,比如VS喜欢的 "CC  CD"等,来帮助发现一些问题。但更多的问题,还是无法查出。

所以一旦程序这么明显得报错,你应该很高兴才对。
离线icove

只看该作者 11楼 发表于: 2010-07-28
如果代码里面有内存错误  不管用什么编译器编译构建 只要运行情况、环境等条件都一样 那么都会出错才对
但是 就拿这个例子来说  mingW 没有提示任何错误  VC2008 一运行就会出错
代码中肯定都是存在问题的
想问问GCC 有这种功能?在编译的时候自动去忽略 声明了 又没初始化的 然后又使用了的变量??
如果没有这种功能的话 也应该像VC2008一样  由于变量使用的内存没有被分配 一运行就该出错才对。
离线dbzhang800

只看该作者 12楼 发表于: 2010-07-28
引用第11楼icove于2010-07-28 11:58发表的  :
如果代码里面有内存错误  不管用什么编译器编译构建 只要运行情况、环境等条件都一样 那么都会出错才对
但是 就拿这个例子来说  mingW 没有提示任何错误  VC2008 一运行就会出错
代码中肯定都是存在问题的
想问问GCC 有这种功能?在编译的时候自动去忽略 声明了 又没初始化的 然后又使用了的变量??
如果没有这种功能的话 也应该像VC2008一样  由于变量使用的内存没有被分配 一运行就该出错才对。


不可能的,更多的时候都会想Mingw这样,表面看起来运转正常,但功能不完全正常。比如无论是mingw,还是用的VS的Release模式,程序都能运行,但界面上缺少一个控件。这种现象已经算很明显的了,都引不起你的注意,也是很不应该。

即使各项看起来都正常了,你应该进行各种测试来寻找bug。
离线dbzhang800

只看该作者 13楼 发表于: 2010-07-28
引用第11楼icove于2010-07-28 11:58发表的  :
如果代码里面有内存错误  不管用什么编译器编译构建 只要运行情况、环境等条件都一样 那么都会出错才对
但是 就拿这个例子来说  mingW 没有提示任何错误  VC2008 一运行就会出错
代码中肯定都是存在问题的
想问问GCC 有这种功能?在编译的时候自动去忽略 声明了 又没初始化的 然后又使用了的变量??
如果没有这种功能的话 也应该像VC2008一样  由于变量使用的内存没有被分配 一运行就该出错才对。


咋可能呢?你没给他赋值,他就是随机值,可以指向在内存中随机位置。 看来你的 C、C++ 还有很多的路要走
离线icove

只看该作者 14楼 发表于: 2010-07-28
^_^确实还有很长很长的路要走

但是就拿这个例子来说 那个变量 我只在头文件中声明了,并没有在其他任何地方为它分配内存
所以 这才让我觉得很奇怪呀~  同样的代码错误  2个编译器表现 就是不相同的啊
离线icove

只看该作者 15楼 发表于: 2010-07-28
dbzhang800
能否告诉我QQ一下 ^_^ 以后多多指点~
快速回复
限100 字节
 
上一个 下一个