【问题标题】:Create random 2d array of char in c++ segmentation fault error在 C++ 分段错误错误中创建随机二维字符数组
【发布时间】:2016-03-21 06:35:05
【问题描述】:

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

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;
}

【问题讨论】:

    标签: c++ arrays char segmentation-fault


    【解决方案1】:

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

    **grid[i] = letters[rd]; - 试图写入不存在的内存

    尝试分配内存。

    不清楚为什么需要 char ** ?为什么不只是

    char grid[widthHeight]; //memory allocated 
    

    并返回 char *,即“网格”。

    【讨论】:

      【解决方案2】:

      char** 网格[widthHeight];是局部变量,退出函数后会被销毁。尽量让它至少是静态的。

      【讨论】:

        【解决方案3】:

        你需要分配内存。

        您使用了二维指针和一个数组,这让人很困惑,但请尝试插入以下代码:

        ......
        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' } ;
        ......
        

        【讨论】:

        • 这不会创建包含字母的随机网格,虽然它编译,但仍然返回分段错误错误
        猜你喜欢
        • 2019-01-28
        • 1970-01-01
        • 2016-05-07
        • 1970-01-01
        • 2012-09-09
        • 2019-08-03
        • 2015-11-11
        • 2015-02-22
        • 1970-01-01
        相关资源
        最近更新 更多