2016-11-18 7 views
-2

配列を解放するのに問題がありました。私はいろいろな方法を試してみましたが、ただ一つのforループで解放しようとしましたが、正直言って本当に立ち往生しています。ここで私のコードは、どんな助けもありがとう!Cでmallocされた2次元配列を解放する際の問題

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

int main(int argc, char *argv[]){ 

int r,c,i,j, *array; 
    int sum = 0; 
    array = (int *)malloc(r*c*sizeof(int)); 

    printf("Enter the number of rows: "); 
    scanf("%d", &r); 
    printf("Enter the number of columns: "); 
    scanf("%d", &c); 

    for(i=0;i<r;i++){ 
    for(j=0;j<c;j++){ 
     array[i*c+j] =+ i+j; 
     sum = sum + array[i*c+j];  
    } 
    } 
    printf("The sum of the array is: %d",sum); 
    for(i=0;i<r;i++){ 
    for(j=0;j<c;j++){ 
     free(array[i*c+j]) 
} 
    } 
    free(array); 
    return 0; 
} 
+0

何が問題ですか?それはクラッシュしますか?それは漏れがありますか?それはコンパイルされませんか?...?具体的にしてください。 – kaylum

+0

申し訳ありませんこれを含めるのを忘れてしまいました。何が起こっているかは、これを実行すると「キャストなしの整数からの自由な点の引数1」と「期待されるvoid *型の引数int型」ですこれらの両方をキャストしようとしたが、まだ運がなかった、おそらく私は間違ってキャストされたが、私は確信していない –

+0

2D配列でコードを投稿できますか? – Olaf

答えて

3

まず第一に、あなたは、あなたも寸法が何であるかを知っている前rcは、未定義の値を持っていると...これは、未定義の動作につながる配列を割り当てています。

これを修正するには、scanfの後にmallocコールを移動します。

第2に、あなたはmallocを1回だけ呼び出します。したがって、freeを一度/電話する必要があります。真ん中にfreeの2つのforループを取り除いてください。

+0

ありがとう、どうして私はスキャンする前にmallocステートメントを作ったのかわからなかった。私のインストラクターはループを使って自由にするように言ったので、ちょっと混乱してしまいました。 –

0

[malloc()と呼んで、 r,cには未定義の値があります。

free()malloc()のためだけに電話をかけてください。 arrayはmalloc-edの唯一のものなので、解放する必要があるのはこれだけです。ループ内のfree()へのコールは不要が間違っています。

+0

マイナーノート:彼らは不必要ではない、彼らは間違っている。 –

+0

@DrewMcGowen:Right :)、答えが更新されました。 – Arun

関連する問題