rangeGetValue在gtk2hs中的mainQuit之后导致段错误

时间:2016-08-03 13:57:07

标签: haskell gtk gtk2hs

我正在使用用gtk2hs编写的图形用户界面开发Haskell项目。当我退出程序时,90%的时间我都会遇到段错误。 (我最近注意到,因为我在开发时通常会在终端上使用Ctrl-C终止我的程序,这不会导致段错误。)

无论如何,我已经使用gdb跟踪了段错误的来源,而这总是由于对gtk_range_get_value ()的调用。有一些尺度,我猜到发生的事情是我的程序的某些部分在比例已经被破坏时询问了比例的价值,因此是段错误。

在制作以下代码后,我的直觉得到了证实,该代码创建了一个比例,并且在销毁主窗口后需要它所携带的值:

import Graphics.UI.Gtk

main :: IO ()
main = do
  initGUI
  window <- windowNew
  set window [containerBorderWidth := 10, windowDefaultWidth := 250]
  adj <- adjustmentNew 1 0 100 1 1 0
  scale <- vScaleNew adj
  containerAdd window scale
  widgetShowAll window
  onDestroy window mainQuit
  mainGUI
  rangeGetValue scale >>= print

然而,我发现有一些奇怪的东西,当我尝试使用旋转按钮执行相同操作时,代码不会出现段错并给我一个值:

import Graphics.UI.Gtk

main :: IO ()
main = do
  initGUI
  window <- windowNew
  set window [containerBorderWidth := 10, windowDefaultWidth := 250]
  adj <- adjustmentNew 1 0 100 1 1 0
  spin <- spinButtonNew adj 1 0
  containerAdd window spin
  widgetShowAll window
  onDestroy window mainQuit
  mainGUI
  spinButtonGetValue spin >>= print

所以这是我的问题:我使用rangeGetValue而不是spinButtonGetValue获得段错是否正常?如果是的话,是否有办法在要求不再存在的某个值时阻止段错误?

0 个答案:

没有答案