得到一个段错误.为什么

Getting a segfault. Why?

本文关键字:错误 为什么 段错误 一个      更新时间:2023-10-16

我一直在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;
}

在这两行中

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

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


然后,当您进入循环时:

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

xy也是未定义的。

通常,我会将这些循环更改为for(或范围for),以尽可能缩小迭代变量的范围。


如果希望它根据用户输入动态分配,请使用 std::vector 并将其resize为所需的大小。

我还要补充一点,二维数组通常是在一维存储向量和其顶部的二维视图上实现的,而不是嵌套向量,所以你可能想阅读这些模式。