ページ 11

mallocでメモリを動的に確保した場合

Posted: 2010年11月12日(金) 11:44
by mint
mallocで10000*100*100の配列用にメモリを確保したのですが、
その後の処理で、for文を繰り返し過ぎてプログラムが終わらず、メモリを解放する前に、
(ctrl + z) で プログラムを強制終了させる。ということを何度か行ったのですが、
これだとメモリは解放されていない状態なのでしょうか?

ubuntu10.10でC言語、コンパイル、実行は端末で行っています。
ご回答よろしくお願いします。

Re:mallocでメモリを動的に確保した場合

Posted: 2010年11月12日(金) 12:42
by 初級者
メモリーは解放されるはずです。

ところで、「for文を繰り返しすぎる」の
ソースコードを開示することは可能ですか?

Re:mallocでメモリを動的に確保した場合

Posted: 2010年11月12日(金) 13:05
by mint
実行時間が長いのは、以下のようにfsacnfでデータを読み込むところでした。
このプログラムは3列のデータを読み込んで、用意した配列に出現回数を格納するためのものです。
なにか処理をはやくするための知恵はないでしょうか?

while(fscanf(fp,"%d %d %d ",&a,&b,&c)!=EOF){
for(i=0;i<100000;i++){
for(j=0;j<100;j++){
for(k=0;k<100;k++){
if(a==i && b==j&& c==k){
E[j][k] += 1;
}
}
}

Re:mallocでメモリを動的に確保した場合

Posted: 2010年11月12日(金) 14:08
by さかまき
while(fscanf(fp,"%d %d %d ",&a,&b,&c)!=EOF){
if ( (-1<a) && (a<100000) && (-1<b) && (b<100) && (-1<c) && (c<100) ) E[j][k] += 1;
}
で良い様な気がします。他に必要な処理があるのかな?

Re:mallocでメモリを動的に確保した場合

Posted: 2010年11月12日(金) 16:33
by みけCAT
さかまきさん
それを言うなら
while(fscanf(fp,"%d %d %d ",&a,&b,&c)!=EOF){  
 if ( (-1<a) && (a<100000) && (-1<b) && (b<100) && (-1<c) && (c<100) ) E[a][c] += 1;  
}

ではないのですか?

Re:mallocでメモリを動的に確保した場合

Posted: 2010年11月12日(金) 16:36
by みけCAT
1を足すだけなので
while(fscanf(fp,"%d %d %d ",&a,&b,&c)!=EOF){  
 if ( (-1<a) && (a<100000) && (-1<b) && (b<100) && (-1<c) && (c<100) ) E[a][c]++;  
}

でもいいと思います。

Re:mallocでメモリを動的に確保した場合

Posted: 2010年11月12日(金) 16:37
by mint
なるほど!
無駄にforでまわしてました。。。
ありがとうございます。 画像

Re:mallocでメモリを動的に確保した場合

Posted: 2010年11月12日(金) 18:51
by 初級者
最初の投稿では
10000*100*100
と書かれてますが、いつの間にか10倍になってますね。
どっちが正しいんですか?