C void函数中二维数组上的指针

C void函数中二维数组上的指针,c,C,我想用一个void函数来初始化我的2D数组。但我得到了一个分段错误 这是我的密码: #include <stdio.h> #include <stdlib.h> #include <string.h> void groupeetchoixgen(int*** choixGEN); void main(int args, char **argv) { int** choixGEN;

我想用一个void函数来初始化我的2D数组。但我得到了一个分段错误

这是我的密码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>


    void groupeetchoixgen(int*** choixGEN);

    void main(int args, char **argv)
    {
        int** choixGEN;
        int i,j;
        choixGEN=(int**) malloc (sizeof(int*)*2);  
        for (i=0; i<3; i++)
        {
            choixGEN[i]=(int*) malloc (sizeof(int)*3);
        } 
        groupeetchoixgen(&choixGEN);
    }

        void groupeetchoixgen(int*** choixGEN)
    {
        (*(choixGEN)[1])[0]=1;
    }
#包括
#包括
#包括
无效组选择根(内部***选择根);
void main(整型参数,字符**argv)
{
国际**choixGEN;
int i,j;
choixGEN=(int**)malloc(sizeof(int*)*2);

对于(i=0;i您只为两个
(int*)
分配内存,但您尝试引用
choixGEN[0]、choixGEN[1]、choixGEN[2]
即3

您只为两个
(int*)
分配内存,但您尝试引用
choixGEN[0]、choixGEN[1]、choixGEN[2]
即3

,在这一行:

    choixGEN=(int**) malloc (sizeof(int*)*2);
choixGEN=(int**) malloc (sizeof(int*)*2);
您只为2个
int*
s分配空间,但可以访问
for
循环中的第三个元素。

在这一行:

    choixGEN=(int**) malloc (sizeof(int*)*2);
choixGEN=(int**) malloc (sizeof(int*)*2);

您只为2个
int*
s分配空间,但您访问
for
循环中的第三个元素。

通常,
C
中的
segfult
表示:

  • 您正在访问内存中未分配的位置
  • 您正在使用悬空指针访问内存位置
  • 因此,最有可能的问题是:

        choixGEN=(int**) malloc (sizeof(int*)*2);
    
    choixGEN=(int**) malloc (sizeof(int*)*2);
    

    您声明了一个
    int***choixGEN
    ,但只为
    (int**)
    分配了内存。通常,
    C
    中的
    SegFault
    表示:

  • 您正在访问内存中未分配的位置
  • 您正在使用悬空指针访问内存位置
  • 因此,最有可能的问题是:

        choixGEN=(int**) malloc (sizeof(int*)*2);
    
    choixGEN=(int**) malloc (sizeof(int*)*2);
    

    您声明了一个
    int***choixGEN
    ,但只为
    (int**)

    分配了内存。您可以将错误消息粘贴到这里吗?它不应该是
    (*choixGEN)[1][0]=1;
    ?您可以将错误消息粘贴到这里吗?它不应该是
    (*choixGEN 1][0]=1;