0

さて、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; だと思います。しかし、なぜだかわかりません!

ご協力いただきありがとうございます

4

3 に答える 3

4

この行で:

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

2 のスペースのみを割り当てていますが、ループint*内の 3 番目の要素にアクセスしています。for

于 2012-07-20T19:44:58.337 に答える
1

メモリを2つだけ割り当てますが、どれが3である(int*)かを参照しようとしますchoixGEN[0],choixGEN[1],choixGEN[2]

于 2012-07-20T19:44:45.233 に答える
0

一般的には、次のことSegFaultC意味します。

  1. 割り当てられていないメモリ内の場所にアクセスしています。
  2. ダングリング ポインターを使用してメモリの場所にアクセスしている

したがって、ほとんどの場合、問題は次の行にあります。

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

宣言しましたint*** choixGENが、割り当てられたメモリのみ(int**)

于 2012-07-21T00:07:58.550 に答える