void函数中的2d数组上的指针

时间:2012-07-20 19:40:07

标签: c

好吧,我想通过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;
    }

我认为麻烦是(*(choixGEN)[1])[0] = 1; 但我不知道为什么!

感谢您的帮助

3 个答案:

答案 0 :(得分:4)

在这一行:

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

一般情况下,SegFault中的C表示:

  1. 您正在访问未分配的内存中的某个位置。
  2. 您正在使用悬空指针访问内存位置
  3. 所以,很可能,你的问题就在这一行:

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

    您声明了int*** choixGEN,但仅为(int**)

    分配了内存