0

我正在尝试将指针传递给指向过程的指针,但是每次我都会遇到段错误,而将其传递给函数则可以正常工作。我想这可能与强制 C 自动在数组上指向指针有关,例如在这个问题中: 将指针传递给 C 中的指针

但我不知道如何解决它。

这是代码:

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

void creer_matrice(int nbCol, int nbLigne, char **matrice)
{
     int i,j;

     matrice = calloc( nbCol, sizeof(char*));

     if( matrice == NULL ){

         printf("Allocation impossible");
         exit(EXIT_FAILURE);

     }

     for( i = 0 ; i < nbLigne ; i++ ){

          matrice[i] = calloc (nbCol, sizeof(char*));

            if( matrice[i] == NULL ){

             printf("Allocation impossible");
             exit(EXIT_FAILURE);

             }
      }


      /* Remplissage de test*/
     for(i = 0; i < nbLigne; i++){

           for(j = 0; j < nbCol; j++){
             matrice[i][j] = 'I';
           }

     }

   //return matrice;
}


int main(){
    int i,j;

    char **matrice;

    creer_matrice(8,6,matrice);

    //matrice = creer_matrice(8,6);

      for(i = 0; i < 6; i++){
         for(j = 0; j < 8; j++){
            printf("%c ",matrice[i][j]);
         }
      printf("\n");
      }

}

有人可以告诉我我错在哪里以及如何解决吗?

4

2 回答 2

0
matrice = calloc( nbCol, sizeof(char*));

在这里,您没有为矩阵分配足够的内存。您需要根据矩阵的大小和存储在其中的类型来分配内存:

matrice = calloc(nbCol * nbLigne, sizeof(int));

并删除

matrice[i] = calloc (nbCol, sizeof(char*));

尽量少做系统调用。如果您可以在一次调用中分配所有矩阵,请执行此操作。您已经知道在函数开始时要分配的确切大小。

完成后不要忘记释放分配的内存。

free(matrice);
于 2013-02-03T13:55:44.057 回答
0

更改此行:

 for( i = 0 ; i < nbLigne ; i++ ){

      matrice[i] = calloc (nbCol, sizeof(char*));

到:

 for( i = 0 ; i < nbCol ; i++ ){

      matrice[i] = calloc (nbLinge, sizeof(char));

或者更好:在一个语句中为整个矩阵分配内存。

于 2013-02-03T13:56:15.333 回答