我正在使用用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
获得段错是否正常?如果是的话,是否有办法在要求不再存在的某个值时阻止段错误?