同时呼吁XtDestroyWidget主题应用程序崩溃

我们有一个32位的Motif GUI应用程序。 现在,我们从移植的Solaris应用到Linux,系统崩溃非常频繁。 在我们的分析中,我们可以发现,当我们关闭形式在我们的应用程序这个问题发生了。 当窗体被关闭,我们将删除的形式,将调用函数XtDestroyWidget()删除窗口小部件。 我们跑了一个净化的应用程序,我们可以发现,堆栈数组界限阅读(SBR)正在发生的事情,当我们关闭窗体。

我从它使用XtDestroyWidget()来销毁对象网上下载的样本主题节目。 当我跑净化这个示例程序还,我可以找到相同的SBR。

丁苯橡胶:堆栈数组越界阅读(54次):*此发生,而在:XtDispatchEvent [libXt.so.4] RemoveAllPMgr [具备libXm.so.3] XtCallCallbackList [libXt.so.4] XtPhase2Destroy [libXt.so.4] _XtDoPhase2Destroy [libXt.so.4] XtDispatchEvent [libXt.so.4] XtAppMainLoop [libXt.so.4]主[popup.cc:49] _start [crt1.o] *读取4个字节0xffbfe4f0。 *帧指针0xffbfe4d0 *地址0xffbfe4f0为32字节以上功能XtCallCallbackList堆栈指针。

这SBR是发生在XtAppMainLoop()。 从这些事实我认为这SBR是一种常见的和相关的主题,而不是我们的应用程序。

能否请你添加一些思考以下几个问题。 1)为什么SBR正在发生的事情,当我们使用XtDestroyWidget()。 这是SBR严重的之一。

2)我已经删除了XtDestroyWidget和使用XtUnrealizeWidget()。 这将帮助我消除了SBR,因此碰撞没有发生。 也一切正常形式将正常删除。 但我面临这种方法的问题是POP_UP形式在这个方法中不会被删除。 任何一个可以请提出一个变通去除POP_UP形式比隐藏选项还有其他。

这将是对我来说非常有帮助,如果任何人都可以接听或添加一些思考这个问题。

在此先感谢,Sanush查科

-----加样编程..你好请找到从那里我得到了SBR的示例程序。

包括X11 / StringDefs.h包括XM / Xm.h包括XM / PushB.h

窗口小部件顶层;

无效close_window(部件w,XtPointer client_data,XtPointer EVENT_DATA){小工具弹出=(小工具)client_data; XtDestroyWidget(弹出式); }

无效流行(部件w,XtPointer client_data,XtPointer EVENT_DATA){小窗口,按钮,弹出;

popup = XtVaCreatePopupShell("Popup", transientShellWidgetClass, toplevel, NULL); button = XtVaCreateManagedWidget("Close", xmPushButtonWidgetClass, popup, NULL); XtAddCallback(button, XmNactivateCallback, close_window, (XtPointer)popup); XtPopup(popup, XtGrabNone);

}

主(INT ARGC,字符* argv的[]){小工具按钮; XtAppContext应用; XmString时标签;

toplevel = XtVaAppInitialize(&app, "Popup", NULL, 0, &argc, argv, NULL, NULL); label = XmStringCreateSimple("Make popup"); button = XtVaCreateManagedWidget("pushme", xmPushButtonWidgetClass, toplevel, XmNlabelString, label, NULL); XmStringFree(label); XtAddCallback(button, XmNactivateCallback, pop, NULL); XtRealizeWidget(toplevel); XtAppMainLoop(app);

}

--------------解决方案-------------

你不应该叫一个由小工具回调中破坏部件。

而不是创建一个新的弹出窗口每一次你点击一个按钮,创建一个弹出式在程序的开始,当你创建按钮,显示并根据需要隐藏弹出,然后XtAppMainLoop后摧毁它()返回。

这是在性能方面更有效(但在内存方面略少效率)。

我有点生疏,但我相信你也可以管理/取消管理的窗口小部件,而不是仅仅隐藏/显示它。

分类:崩溃 时间:2015-03-15 人气:0
本文关键词: 崩溃,主题,Xlib的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.418 (s). 10 q(s)