ページ 1 / 1
malloc()でのメモリ確保が上手くいかない
Posted: 2014年11月23日(日) 17:01
by wasawasa
こんにちは、何度もお世話になっております。
学校の課題である行列計算を行うプログラムの提示を求められたため、以下に添付したプロジェクトを作ったのですが、GaussEliminationSet.cpp
の50行目で double *w に malloc() でメモリを確保するのが上手くいかないらしく、同ファイルの52行目でアクセス違反が起きてしまいます。
一体何故 double *w へのメモリの確保が上手くいかないのでしょうか?どなたかよろしくお願いします。
Re: malloc()でのメモリ確保が上手くいかない
Posted: 2014年11月23日(日) 17:35
by box
CPals.Plane
の値が正しくない、とか…。
ところで、どうでもいい話ですが、
roop
って何でしょうか。
loop
の間違い?
Re: malloc()でのメモリ確保が上手くいかない
Posted: 2014年11月23日(日) 17:41
by みけCAT
自分の環境(GCC 4.8.1)で実行した所、
wasawasa さんが書きました:GaussEliminationSet.cpp
の50行目で double *w に malloc() でメモリを確保するのが上手くいかないらしく、同ファイルの52行目でアクセス違反が起きてしまいます。
という現象は再現できず、
main関数の62行目で呼び出しているStrReg関数において、NewStrに0が渡されており、19行目のstrlenでアクセス違反が起きてしまいました。
GaussEliminationSet.cppのComparePivotYN関数において、SinResultを更新する処理が無く、
102行目でSinResult.buff=NULL;と初期化したものがそのまま渡っていると思います。
StrReg関数の引数CalStrは値渡しではなく、参照渡しにすることを想定しているのではないでしょうか?
見るプログラムが間違っていたらすみません。
【編集】17:50 プロジェクトファイルが入っていなかったのでファイルを差し替えました
Re: malloc()でのメモリ確保が上手くいかない
Posted: 2014年11月23日(日) 18:34
by wasawasa
みけCATさんのご指摘を受けて添付ファイルを確認してみたところ、ファイルを整理する過程でおかしな事になってたみたいです。
添付したファイルにわざわざ手を加えて貰っておいて難ですが、修正したファイルを貼り直しておきます。
お手数をおかけして申し訳ございませんが改めてよろしくお願いします。
Re: malloc()でのメモリ確保が上手くいかない
Posted: 2014年11月23日(日) 19:12
by みけCAT
同じ場所でアクセス違反が発生しました。
タイムスタンプの目視、及びdiffを用いて調べてみましたが、ソースコードに最初のファイルとの違いは発見できませんでした。
Re: malloc()でのメモリ確保が上手くいかない
Posted: 2014年11月23日(日) 21:35
by Ryo
修正版を試したところ、私の環境でも再現できました
mallocをnewにしても破壊されたので、どっかでメモリぶっ壊してるのではと探ってみたのですが
GaussEliminationSet.cpp:ComparePivotYN()内にて
102行目でSinResultの中身が初期化された状態のまま
118行目で呼び出しているStrReg()に引き渡し、その先でメモリぶっ壊しているようです。
118行目をコメントアウトしたら通りました。
同じ結果になるとは限りませんが、参考に。
Re: malloc()でのメモリ確保が上手くいかない
Posted: 2014年11月28日(金) 14:27
by wasawasa
お返事が遅くなりましたが、お陰様でメモリを確保できなくなる問題を解決した上で提出できました。
修正内容としてはStrReg()の構造に問題があったため、そちらを書き直して解決できました。
ありがとうございます。