Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中动态分配2D数组_C_Arrays_Pointers_Multidimensional Array_Dynamic Memory Allocation - Fatal编程技术网

在C语言中动态分配2D数组

在C语言中动态分配2D数组,c,arrays,pointers,multidimensional-array,dynamic-memory-allocation,C,Arrays,Pointers,Multidimensional Array,Dynamic Memory Allocation,我一直在阅读,我一直在把我读到的东西应用到我的代码中,但我不确定我是否遗漏了什么。。假设2d数组镜像数独。 我知道问题区域在我的arrayMake函数中。 我的教授建议在malloc调用中使用cast,因此: 数独=int**mallocsudokus*sizeofint*;但这对我不起作用 int main(){ int sudokus; int** sudoku; sudokus = getUserInfo(); sudoku = arrayMake(sudo

我一直在阅读,我一直在把我读到的东西应用到我的代码中,但我不确定我是否遗漏了什么。。假设2d数组镜像数独。 我知道问题区域在我的arrayMake函数中。 我的教授建议在malloc调用中使用cast,因此: 数独=int**mallocsudokus*sizeofint*;但这对我不起作用

int main(){
    int sudokus;
    int** sudoku;
    sudokus = getUserInfo();
    sudoku = arrayMake(sudokus);
    /*for (int i = 0; i < (SIZE*sudokus), i++;){
        for (int j = 0; j < SIZE, j++;){
            printf("Numbers[%d][%d]:%d", i, j, sudoku[i][j]);
        }
    }*/
    system("pause");
    return 0;
}

int getUserInfo(){
    int sudokus;
    printf("How many Sudokus are you checking today?\n");
    scanf("%d{^\n]\n", &sudokus);

    return sudokus;
}

int** arrayMake(int sudokus){
    int **sudoku;
    int realsize;
    realsize = 9 * sudokus;

    sudoku = malloc(realsize*sizeof(int*));
    if (sudoku == NULL){
        printf("Memory allocation failed");
        return 0;
    }
    for (int i = 0; i < realsize, i++;){
        sudoku[i] = malloc(9 * sizeof(int));

        if (sudoku[i] == NULL){
            printf("Memory allocaiton failed");
            return 0;
                            }

    }

    return sudoku;
}
我的教授建议对malloc调用使用cast,所以:sudoku=int**mallocsudokus*sizeofint*;但这对我不起作用

int main(){
    int sudokus;
    int** sudoku;
    sudokus = getUserInfo();
    sudoku = arrayMake(sudokus);
    /*for (int i = 0; i < (SIZE*sudokus), i++;){
        for (int j = 0; j < SIZE, j++;){
            printf("Numbers[%d][%d]:%d", i, j, sudoku[i][j]);
        }
    }*/
    system("pause");
    return 0;
}

int getUserInfo(){
    int sudokus;
    printf("How many Sudokus are you checking today?\n");
    scanf("%d{^\n]\n", &sudokus);

    return sudokus;
}

int** arrayMake(int sudokus){
    int **sudoku;
    int realsize;
    realsize = 9 * sudokus;

    sudoku = malloc(realsize*sizeof(int*));
    if (sudoku == NULL){
        printf("Memory allocation failed");
        return 0;
    }
    for (int i = 0; i < realsize, i++;){
        sudoku[i] = malloc(9 * sizeof(int));

        if (sudoku[i] == NULL){
            printf("Memory allocaiton failed");
            return 0;
                            }

    }

    return sudoku;
}
要动态分配2D数组,通常需要执行两个步骤。您的代码不清楚,因为您包含了一个realsize=9*数独,这是没有意义的。无论如何,为了简单起见,让我们假设你的数独是一个3x3矩阵。您需要:

为指向int的指针分配:

int **sudoku = malloc( 3 * sizeof( int * ) );
for( int i = 0; i < 3; i++ )
    sudoku[i] = malloc( 3 * sizeof( int ) );
为每个指向int的指针分配:

int **sudoku = malloc( 3 * sizeof( int * ) );
for( int i = 0; i < 3; i++ )
    sudoku[i] = malloc( 3 * sizeof( int ) );
我的教授建议对malloc调用使用cast,所以:sudoku=int**mallocsudokus*sizeofint*;但这对我不起作用

int main(){
    int sudokus;
    int** sudoku;
    sudokus = getUserInfo();
    sudoku = arrayMake(sudokus);
    /*for (int i = 0; i < (SIZE*sudokus), i++;){
        for (int j = 0; j < SIZE, j++;){
            printf("Numbers[%d][%d]:%d", i, j, sudoku[i][j]);
        }
    }*/
    system("pause");
    return 0;
}

int getUserInfo(){
    int sudokus;
    printf("How many Sudokus are you checking today?\n");
    scanf("%d{^\n]\n", &sudokus);

    return sudokus;
}

int** arrayMake(int sudokus){
    int **sudoku;
    int realsize;
    realsize = 9 * sudokus;

    sudoku = malloc(realsize*sizeof(int*));
    if (sudoku == NULL){
        printf("Memory allocation failed");
        return 0;
    }
    for (int i = 0; i < realsize, i++;){
        sudoku[i] = malloc(9 * sizeof(int));

        if (sudoku[i] == NULL){
            printf("Memory allocaiton failed");
            return 0;
                            }

    }

    return sudoku;
}
要动态分配2D数组,通常需要执行两个步骤。您的代码不清楚,因为您包含了一个realsize=9*数独,这是没有意义的。无论如何,为了简单起见,让我们假设你的数独是一个3x3矩阵。您需要:

为指向int的指针分配:

int **sudoku = malloc( 3 * sizeof( int * ) );
for( int i = 0; i < 3; i++ )
    sudoku[i] = malloc( 3 * sizeof( int ) );
为每个指向int的指针分配:

int **sudoku = malloc( 3 * sizeof( int * ) );
for( int i = 0; i < 3; i++ )
    sudoku[i] = malloc( 3 * sizeof( int ) );

从我看到的情况来看,您的问题存在于for循环中,其中您有:

对于i=0;我是真实尺寸,我是++

当你真正的意思是:

对于i=0;i注意,更改为

从我看到的情况来看,您的问题存在于for循环中,其中您有:

对于i=0;我是真实尺寸,我是++

当你真正的意思是:

对于i=0;i scanf%d{^\n]\n,&sudokus;是一个错误

我猜您的意思是{实际上是一个[但是格式字符串在更改之后仍然是错误的。我认为您打算使用其余的输入,直到并包括一个换行符。但是,您的格式字符串实际上并没有这样做

Scanf'ing for \n实际上意味着使用任意数量的空格,因此实际上带有[fix]的代码将继续等待输入,直到有换行符,以及在换行符之后键入的另一个非空格字符

最好是:

scanf("%d", &sudokus);
int ch;
while ( (ch = getchar()) != '\n' && ch != EOF ) { }
有几种不同的方法可以实现相同的目标。请注意,扫描%d[^\n]%c不是其中之一;该字符串也已断开

我还建议使用不同于数独的变量名。有两个名称相似的变量数独和数独会让人感到困惑。请给它取一个能反映其含义的名称

为了分配数组,取出arrayMake函数并编写如下内容会简单得多:

int sudoku[9][9];
我不知道数独的意思是什么,或者realsize是什么,但是你可以把你想要的尺寸放在方括号里。

scanf%d{^\n]\n,&sudokus;是个错误

我猜您的意思是{实际上是一个[但是格式字符串在更改之后仍然是错误的。我认为您打算使用其余的输入,直到并包括一个换行符。但是,您的格式字符串实际上并没有这样做

Scanf'ing for \n实际上意味着使用任意数量的空格,因此实际上带有[fix]的代码将继续等待输入,直到有换行符,以及在换行符之后键入的另一个非空格字符

最好是:

scanf("%d", &sudokus);
int ch;
while ( (ch = getchar()) != '\n' && ch != EOF ) { }
有几种不同的方法可以实现相同的目标。请注意,扫描%d[^\n]%c不是其中之一;该字符串也已断开

我还建议使用不同于数独的变量名。有两个名称相似的变量数独和数独会让人感到困惑。请给它取一个能反映其含义的名称

为了分配数组,取出arrayMake函数并编写如下内容会简单得多:

int sudoku[9][9];

我不知道数独应该是什么意思,或者realsize应该是什么,但是你可以把你想要的维度放在方括号里。

你想分配一个指针数组还是一个整数数组?要分配一个整数数组,只需分配行数乘以列数乘以sizeofint.Y即可你不需要为每一行或每一列进行新的分配。你的realsize是什么?你的意思是它总是像realsize=9*sudokus;?那么到底出了什么问题?你所有的for循环都是螺旋式的。对于int i=0;i它始终是realsize=9*数独?那么到底出了什么问题?你所有的for循环都有问题。对于int i=0;i