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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mint

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

#1

投稿記事 by mint » 14年前

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

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

初級者

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

#2

投稿記事 by 初級者 » 14年前

メモリーは解放されるはずです。

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

mint

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

#3

投稿記事 by mint » 14年前

実行時間が長いのは、以下のように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でメモリを動的に確保した場合

#4

投稿記事 by さかまき » 14年前

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;
}
で良い様な気がします。他に必要な処理があるのかな?

みけCAT

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

#5

投稿記事 by みけCAT » 14年前

さかまきさん
それを言うなら
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;  
}

ではないのですか?

みけCAT

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

#6

投稿記事 by みけCAT » 14年前

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]++;  
}

でもいいと思います。

mint

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

#7

投稿記事 by mint » 14年前

なるほど!
無駄にforでまわしてました。。。
ありがとうございます。 画像

初級者

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

#8

投稿記事 by 初級者 » 14年前

最初の投稿では
10000*100*100
と書かれてますが、いつの間にか10倍になってますね。
どっちが正しいんですか?

閉鎖

“C言語何でも質問掲示板” へ戻る