0

私は一般的にプログラミングに比較的慣れていないので、正方行列を扱うコードを書こうとしています。残念ながら、私は開発の非常に早い段階で立ち往生しています。

typedef struct Matrix_t{
    float** content;
    size_t size;
} Matrix_t;

int main(int argc, char** argv) {
    Matrix_t* matr;

    initMatrix(matr,s);
    /*
    ...
    ...
    ...
    */
    return 0;
}

void initMatrix(Matrix_t* m, size_t s) {
    int i;

    m = (Matrix_t*) malloc(sizeof(Matrix_t));
    m->content = (float**) malloc(s*sizeof(float*));
    for(i=0;i<s;i++){
        m->content[i] = (float*) malloc(s*sizeof(float));
    }

    m->size = s;
}

initMatrix() が完了した直後に SIGSEGV になります。デバッガーを使用して、initMatrix() を閉じた後、基本的にすべてのマトリックス情報が失われることがわかりました。それはなぜです?どうすれば修正できますか?

前もって感謝します。

4

2 に答える 2

1

メイン関数で matr=NULL を作成して、次を試してください。

main(){

   Matrix_t *matr=NULL;
   /*Declare and initialize "s" variable.... */

   initMatrix(&matr,s);  /* See below...  */
   /*
     .....
   */
}

関数initMatrixのMatrix_t *mでポインターへのポインターを使用します

void initMatrix(Matrix_t **m, size_t s) 
{    
     Matrix_t *aux=(Matrix_t*)malloc(sizeof(Matrix_t));

     /*check if matrix already allocated */  
     if(*m != NULL) 
     {    
         /*Make a free matrix function to free the matrix before use*/          
         free_my_matrix(m); 
         *m=NULL;
     }

     /***
        Work with aux....
        aux->content=...malloc....
     ***/

     /* make your base pointer be aux */           
     *m=aux; 
}
于 2015-01-15T20:16:09.677 に答える