double**w;
int no;
|
if((w = (double *)malloc(sizeof(double)*no))==NULL){
printf("Memory Error1");
exit(1);
}
|
データ格納処理
|
free(w);
のようなプログラムの中で、
データ格納処理の途中でSegmentation faultで
落ちてしまいました。この場合、freeが実行されなくても
メモリは解放してくれるのでしょうか?
また、mallocでメモリ確保できたはずなのに
存在するはずの場所にデータを格納できない原因として
考えられるものはなんでしょうか?
ちなみに、落ちる場所が実行の度に変わっているようで、
同じ条件なのにデータの格納数が違っています。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
double **w;
を
double *w;
に変えましょう。何故ダブルポインタにしてるのか不明ですが、これでは意図した動作はできないと思いますよ。
Segmentation Faultで落ちると、プログラムが落ちるのですよね?
大体はOSが開放してくれます。
この回答への補足
すみません、省略しすぎました。
実際は2次元配列で
double**w;
int no;
int no2;
if((w = (double **)malloc(sizeof(double *)*no))==NULL){
printf("Memory Error1");
exit(1);
}
for(no2=0; no2<no; no2++){
if((w[no2] = (double *)malloc(sizeof(double)*no))==NULL){
printf("Memory Error2");
exit(1);
}
}
とやっています。
メモリは自動解放してくれるのですね。
教えていただき、ありがとうございます。
No.2
- 回答日時:
w[no]の配列領域を確保するんですから、
double *w;
でなければいけませんね。
w = (double *)malloc(sizeof(double)*no)
の部分も左右の型が違っていますね。
これではうまく動きません。
malloc()した領域はOSがヒープから割り当てますが、プロセスが終了すれば
普通はOSが開放します。
(プログラムできちんと処理する様にするのがベターですが)
この回答への補足
すみません、省略しすぎました。
実際は2次元配列で
double **w;
int no;
int no2;
if((w = (double **)malloc(sizeof(double *)*no))==NULL){
printf("Memory Error1");
exit(1);
}
for(no2=0; no2<no; no2++){
if((w[no2] = (double *)malloc(sizeof(double)*no))==NULL){
printf("Memory Error2");
exit(1);
}
}
とやっています。
メモリは自動解放してくれるのですね。
教えていただき、ありがとうございます。
No.3
- 回答日時:
この場合は2次元配列とはいいせんが・・・
ヒント
double **w;
double *w1;
int no;
int no2;
if((w1 = (double *)malloc(sizeof(double *)*no))==NULL){
printf("Memory Error1");
exit(1);
}
w=&w1;
for(no2=0; no2<no; no2++){
if((w1[no2] = (double *)malloc(sizeof(double)*no))==NULL){
printf("Memory Error2");
exit(1);
}
w=1;
}
No.4
- 回答日時:
2次元配列をmallocですか...
普通、構造体使いませんか?
typedef struct
{
double *w;
} TW;
TW *w;
if((w = (TW *)malloc(sizeof(TW)*no))==NULL){
printf("Memory Error1");
exit(1);
}
for (i=0; <no; i++){
if((w[i].w = (double *)malloc(sizeof(double)*no))==NULL){
printf("Memory Error2");
exit(1);
}
}
利用するときは
for (i=0; i<no; i++) {
for (j=0; j<no; j++) {
w[i].w[j] =・・・;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 機械語に詳しい方 2 2022/07/10 12:06
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
- Visual Basic(VBA) マクロについて教えてください。 3 2023/06/09 17:37
- Visual Basic(VBA) マクロについて教えてください。 1 2023/06/09 13:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
float型とdouble型の変数の違い...
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
C言語を実行すると-infが出てき...
-
たくさんの数の平均を求める方...
-
doubleの変数にintとintの割り...
-
2次方程式の解を求めるプログ...
-
C言語
-
三角形OABの面積を求めるプ...
-
C言語 関数プロトタイプ宣言の...
-
c言語のプログラミングについて...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語の型による処理速度の違い
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C++で外積
-
double型とint型で三分の一乗の...
-
EXE1→DLL→EXE2数値を受け渡す方法
-
C言語初心者 構造体 課題について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
C言語初心者 構造体 課題について
-
C言語の型による処理速度の違い
-
Cで3乗根を求める方法
-
C言語で-23乗を取り扱うには
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C言語のプログラムで#include<m...
-
int とdoubleの比較
-
C++で外積
おすすめ情報