【问题标题】:Getting a segfault. Why?得到一个段错误。为什么?
【发布时间】:2016-04-25 09:24:20
【问题描述】:

我不断收到grid[x][y] = rand(); 的段错误 有什么帮助吗?我试过用数字替换随机函数调用,看看是否是导致问题的原因,但似乎不是这样。我不知道

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){

int x;
int y;
int gridMult;
int grid[gridMult][gridMult];

srand(time(NULL));

std::cout << "Enter grid size:: ";
std::cin >> gridMult;

while(x < gridMult){
    while(y < gridMult){
        grid[x][y] = rand();
        y++;
    }
x++;
}

for(int x = 0; x < gridMult; x++){
    for(int y = 0; y < gridMult; y++){
        std::cout << grid[x][y];
    }
    std::cout << std::endl;
}
return 0;
}

【问题讨论】:

  • x和y的初始值是多少?
  • std::cin &gt;&gt; gridMult;之后移动int grid[gridMult][gridMult];
  • 您正在初始化数组grid,其值为未定义的gridMult,您在创建数组后将值加载到gridMult,这不是您想要的

标签: c++ segmentation-fault


【解决方案1】:

这两行

int gridMult;
int grid[gridMult][gridMult];

gridMult 未定义,那么您希望编译器如何正确调整您的数组大小?


然后当你到达循环时:

while(x < gridMult){
    while(y < gridMult){
        grid[x][y] = rand();

xy 也是未定义的。

一般来说,我会将这些循环更改为 for(或 range-for)以尽可能缩小迭代变量的范围。


如果您希望它根据用户输入动态分配,请将std::vectorresize 使用到所需的大小。

我还要补充一点,二维数组通常是在一维存储向量和二维视图上实现的,而不是嵌套向量,因此您可能想了解这些模式。

【讨论】:

  • 即使定义了gridMult,C++中仍然不允许int grid[gridMult][gridMult];
  • @LưuVĩnhPhúc 是的。但我觉得在这里关注解决方案而不是问题是更好的方法。
  • 为什么不允许这样做?试图了解所有这些哈哈
  • @Austin_No_Brain 因为在 C++ 中,数组大小必须是编译时常量。
  • @Austin_No_Brain 请参阅我答案的第三部分。使用std::vector
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 2020-11-14
相关资源
最近更新 更多