在c ++分段错误错误中创建随机的2d char数组

时间:2016-03-21 06:35:06

标签: c++ arrays char segmentation-fault

我正在尝试在C ++中创建一个返回特定随机字母的2D数组的函数。另一个函数用于获取用户输入,例如数组的长度。下面的代码编译,但会产生分段错误(核心转储)错误。

char** createGrid () { 
    srand(time(NULL)); //INIT RANDOM SEED
    int rd;
    char** grid[widthHeight];
    rd = rand() % 4;
    char letters[5] = { 'E', 'G', 'R', 'F', 'B' } ;
    for(int i = 0; i < widthHeight-1; i++) {
        for(int j = 0; j < widthHeight-1; j++) {
            **grid[i] = letters[rd];
            cout << grid[i] << endl;
            **grid[j] = letters[rd];
            cout << grid[j] << endl;

        } //for

    } //for
    return *grid; //idk why need *
} 

int main(int argc, char* argv[]) {
    getInput();
    createGrid();
    return 0;
}

3 个答案:

答案 0 :(得分:0)

char** grid[widthHeight]; - 指针数组,没有为实际数据分配内存。

**grid[i] = letters[rd]; - 尝试写入非现有内存

尝试分配内存。

不清楚为什么需要char **?为什么不呢

char grid[widthHeight]; //memory allocated 

并返回char *,这只是“网格”。

答案 1 :(得分:-1)

你需要分配内存。

您使用了2d指针和一个令人困惑的数组,但请插入以下代码尝试:

......
rd = rand() % 4;

for(i=0; i<widthHeight; i++) {
    grid[i] = (char **) malloc(widthHeight*sizeof (char *));
}

for(j=0; j<widthHeight; j++) {
    for(k=0; k<widthHeight; k++) {
        grid[j][k] = (char *)malloc(widthHeight*sizeof (char));
    }
}

char letters[5] = { 'E', 'G', 'R', 'F', 'B' } ;
......

答案 2 :(得分:-1)

char ** grid [widthHeight];是局部变量,退出函数后将被销毁。尽量让它静止不动。