mallocで10000*100*100の配列用にメモリを確保したのですが、
その後の処理で、for文を繰り返し過ぎてプログラムが終わらず、メモリを解放する前に、
(ctrl + z) で プログラムを強制終了させる。ということを何度か行ったのですが、
これだとメモリは解放されていない状態なのでしょうか?
ubuntu10.10でC言語、コンパイル、実行は端末で行っています。
ご回答よろしくお願いします。
mallocでメモリを動的に確保した場合
Re:mallocでメモリを動的に確保した場合
実行時間が長いのは、以下のように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;
}
}
}
このプログラムは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でメモリを動的に確保した場合
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;
}
で良い様な気がします。他に必要な処理があるのかな?
if ( (-1<a) && (a<100000) && (-1<b) && (b<100) && (-1<c) && (c<100) ) E[j][k] += 1;
}
で良い様な気がします。他に必要な処理があるのかな?
Re:mallocでメモリを動的に確保した場合
さかまきさん
それを言うなら
ではないのですか?
それを言うなら
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でメモリを動的に確保した場合
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]++; }
でもいいと思います。