linux– 使用new创建Qt QApplication时的分段错误

linux– 使用new创建Qt QApplication时的分段错误,第1张

概述我有一个程序,其中使用new运算符创建QApplication.它因未知原因而崩溃.我使用RedHat Linux,G 4.8.2,Qt 4.7.2,它是用相同的编译器构建的.这个源包含许多看似无用但无害的部分,例如带有四个未使用参数的'func'函数.如果我试图删除它们并进一步简化程序,则崩溃不再可以再现,这当然并不意味着问题已经解决.崩溃发生在函数str

我有一个程序,其中使用new运算符创建QApplication.它因未知原因而崩溃.我使用RedHat Linux,G 4.8.2,Qt 4.7.2,它是用相同的编译器构建的.

这个源包含许多看似无用但无害的部分,例如带有四个未使用参数的’func’函数.如果我试图删除它们并进一步简化程序,则崩溃不再可以再现,这当然并不意味着问题已经解决.

崩溃发生在函数strlen中,该函数从系统函数XSetCommand调用.添加我自己的简单实现允许我看到strlen收到一个损坏的指针,见下文.

#include 

崩溃回溯:

#0  0x0000000000400f13 in strlen (p=0x11 

如你所见,它发生在strlen中.这就是我将自己的实现包含在内的原因.它的论点p指向无处.我尝试使用Qt的调试版本重现它 – 没有运气.这一切都让我觉得这里存在令人讨厌的记忆腐败.但它会在哪里发生?我这里只做无辜的事.

我用CMake来构建它:

cmake_minimum_required (VERSION 2.8) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unused-local-typedefs -fpic -fvisibility=hidden -m64")set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb -DDEBUG -gdwarf-2 -fstack-protector-all")set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs")include_directories(${CMAKE_CURRENT_SOURCE_DIR})find_package(Qt4 REQUIRED)include(${QT_USE_FILE})add_executable(myprog myprog.cpp)target_link_libraries(myprog ${QT_LIBRARIES})

我试图在Qt文档和互联网中找到提示 – 没有运气.
谢谢最佳答案QApplication对argc和argv有一个特殊的(和IMHO可疑的)要求.见documentation:

Warning: The data referred to by argc and argv must stay valID for the entire lifetime of the QApplication object. In addition,argc must be greater than zero and argv must contain at least one valID character string.

如果argc和argv在运行时被销毁,则会发生未定义的行为.它可能在某些平台上运行,并且会在其他平台上崩溃.相应地更改您的代码并检查它是否修复了您的问题. 总结

以上是内存溢出为你收集整理的linux – 使用new创建Qt QApplication时的分段错误全部内容,希望文章能够帮你解决linux – 使用new创建Qt QApplication时的分段错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)