我注意到每当我声明或初始化int c = 0
时,我似乎都会遇到分段错误。只有当我注释掉我的代码的特定行时它才能正常工作。这是我的代码的一部分:
int a = 0;
int b = 0;
int c = 0;
struct alphabet{
int first;
char word[30];
};
我使用a
和b
作为我唯一的整数测试了我的代码。一旦我稍后尝试初始化c
,它才开始向我提供分段错误。我只是不明白为什么会发生这种情况。有人能帮助我吗?
提前谢谢!
答案 0 :(得分:0)
由于您发布的代码非常简短,因此很难给您一个具体的建议。 Hovewer,让我们尝试一下“平均值”'案件。所有三个function ConfirmWindow(title, msg, showOkButton) {
//debugger
var defer = $.Deferred();
$($('#ConfirmWindow')).dialog({
// modal: true,
title: title,
height: 175,
width: 440,
resizable: false,
closeOnEscape: true,
draggable: false,
open: function() {
var markup = msg;
$(this).html(markup);
$(this).closest(".ui-dialog")
.find(".ui-dialog-titlebar-close")
.removeClass("ui-dialog-titlebar-close")
.html("<span class='ui-button-icon-primary ui-icon ui-icon-closethick'></span>");
$(this).closest(".ui-dialog").find(".ui-widget-header")
.addClass("ConfirmHeaderClass");
$(this).parent().css("zIndex", 2000);
if (!showOkButton)
$('.ui-dialog-buttonpane button:contains("Ok")').button().hide();
else {
$('.ui-dialog-buttonpane button:contains("Yes")').button().hide();
$('.ui-dialog-buttonpane button:contains("No")').button().hide();
$('.ui-dialog-buttonpane button:contains("Cancel")').button().hide();
}
},
close: function() {
defer.resolve("cancel");
$(this).dialog('close');
},
buttons: {
Yes: function() {
defer.resolve("yes");
$(this).dialog("close");
},
No: function() {
defer.resolve("no");
$(this).dialog("close");
},
Cancel: function() {
defer.resolve("cancel");
$(this).dialog("close");
},
Ok: function() {
defer.resolve("ok");
$(this).dialog("close");
},
}
});
//debugger
return defer.promise();
}
变量都位于堆栈帧中。因此,添加更多变量(如int
)可以移动可能在以后定义的其余堆栈变量的位置。特别是,如果您实例化具有数组字段c
的结构alphabet
的实例。想象一下如果你欠载它会发生什么(从对数组的左边两部分的baundary访问)。如果此欠载与word
所在的区域重叠,并且您通过初始化c
向其写入,则c
上的潜在字符串操作可能会崩溃。所以,我的建议是从这个函数开始进行代码审查。重点是使用未初始化的变量,超出边界访问和挂起指针的堆栈变量。一个好的做法也是使用一些静态代码分析工具。有关更具体的提示,您需要扩展您的问题,以提供上述评论中建议的更多详细信息。