【问题标题】:debug segmentation fault in c++在 C++ 中调试分段错误
【发布时间】:2015-04-24 12:25:37
【问题描述】:

我需要帮助调试以下代码块。仅当我尝试将适当的(char)值分配给 squares[i][j] 时,此代码块才会给我一个分段错误错误。我该如何解决这个问题?

for(int i=0;i<sides;i++){
    for(int j=0;i<sides;j++){
        squares[i][j] = '';
    }
}  

我在嵌套的 for 循环之前使用以下代码声明了数组 squares[][]:

char **squares = new(nothrow) char*[sides-1];
for(int i=0; i < sides-1; i++){
    squares[i] = new char[sides-1];
}

【问题讨论】:

  • 内部循环有一个i&lt;sides 而不是j&lt;sides
  • 您只创建了 side-1 数组,但您尝试在循环中访问它们的“边”数(将 i

标签: c++ debugging multidimensional-array segmentation-fault


【解决方案1】:

很多更好的方法来声明一个空字符串数组是使用String[] 不要忘记你在 C++ 中。 在您的情况下,由于您似乎想要做一个方形数组,如果尺寸已知,您可以使用 std::array ,或者对于未知尺寸使用 std::vector 。 现在要获得严格的答案,请在第二个循环中使用 j 而不是 i。

for(int i=0;i<sides - 1;i++){
    for(int j=0;j<sides - 1;j++){
        squares[i][j] = '';
    }
}  

强烈鼓励您尝试查看字符串的问题,而不是重新发明轮子。 (感谢 NathanOliver 和 jsantander 的帮助)

【讨论】:

  • 不要忘记@Creis 所说的:循环限制也是错误的。
  • @jsantander 是的,谢谢你的提醒,我现在正在改变它
  • 如果尺寸已知,最好使用std::array,如果尺寸未知,最好使用std::vector
  • @NathanOliver 更新我的答案,感谢您的输出 nathan
【解决方案2】:

在您的声明中,尝试将 i

char **squares = new(nothrow) char*[sides-1];
for(int i=0; i < sides; i++){
    squares[i] = new char[sides-1];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-26
    • 2015-12-23
    • 1970-01-01
    • 2012-05-11
    • 2015-02-18
    • 2013-02-10
    • 1970-01-01
    • 2012-01-12
    相关资源
    最近更新 更多