ページ 1 / 1
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倍になってますね。
どっちが正しいんですか?