C ++ - 声明和初始化int时的分段错误

时间:2016-02-22 07:15:05

标签: c++ segmentation-fault int

我注意到每当我声明或初始化int c = 0时,我似乎都会遇到分段错误。只有当我注释掉我的代码的特定行时它才能正常工作。这是我的代码的一部分:

int a = 0;
int b = 0;
int c = 0;

struct alphabet{
     int first;
     char word[30];
};

我使用ab作为我唯一的整数测试了我的代码。一旦我稍后尝试初始化c,它才开始向我提供分段错误。我只是不明白为什么会发生这种情况。有人能帮助我吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

由于您发布的代码非常简短,因此很难给您一个具体的建议。 Hovewer,让我们尝试一下“平均值”&#39;案件。所有三个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上的潜在字符串操作可能会崩溃。所以,我的建议是从这个函数开始进行代码审查。重点是使用未初始化的变量,超出边界访问和挂起指针的堆栈变量。一个好的做法也是使用一些静态代码分析工具。有关更具体的提示,您需要扩展您的问题,以提供上述评论中建议的更多详细信息。