将指针传递给C中过程中的指针

时间:2013-02-03 13:41:39

标签: c pointers char procedure

我正在尝试将指针传递给指向程序的指针,但我每次都会得到一个段错误,而将它传递给函数则完全正常。 我想这可能与强制C在数组上自动执行指针有关,例如在这个问题中: passing a pointer to a pointer in 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");
      }

}

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

2 个答案:

答案 0 :(得分:0)

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

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

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

并删除

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

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

一旦完成,不要忘记释放已分配的内存。

free(matrice);

答案 1 :(得分: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));

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