我正在尝试在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;
}
答案 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];是局部变量,退出函数后将被销毁。尽量让它静止不动。