2016-11-20 3 views
-1

私はCで行列を大きくする関数を持っています。これは初めて使うときに機能しますが、2回目にはrealloc(): invalid old sizeが得られます。何が起きているのかについてのアイデアはありますか?Cで行列をリサイズする

は、ここでは、コードです:

int** resize_matrix(int** matrix, long org_size, long size_inc){ 

    long new_size = org_size + size_inc; 
    int** new; 
    int* temp; 

    new = realloc(matrix, new_size*sizeof(int*)); 

    for(long i=0; i<org_size; i++){ 
    //error happens here, when i=0, but only the second time you run it 
    temp = realloc(new[i], new_size*sizeof(int)); 
    new[i] = temp; 
    //clears the added space 
    for(long i2=org_size; i2<new_size; i2++){ 
     new[i][i2] = 0; 
    } 
    } 

    for(long i = org_size; i<new_size; i++){ 
    new[i] = calloc(new_size, sizeof(int)); 
    } 

    return new; 
} 
+0

最後に "return new"と言って、それを忘れてしまいました。 – e2298

+0

realloc()や 'calloc()'が失敗した(NULLを返す)かどうかを確認するコードを追加してください。また、この関数をどのように呼び出すかを示してください...エラーが存在する可能性があります。 –

+0

@ e2298 old_sizeとは何ですか? –

答えて

0

は、間違いを発見、ちょうどので、私はそれを引き起こしたことresize_matrixだったと思わせるために、適切なタイミングで私の出力を停止するように起こっていること、resize_matrixの呼び出し後に何かでした。あなたの時間を取って申し訳ありません。