質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

348閲覧

ウィンドウを動かすとメモリ使用量が急激に増え、プログラムが停止してしまう。

TRON1216.

総合スコア37

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/12/10 13:22

.bat形式のあるデータ(球体の半径など)を読み取り、タイマー関数を用いてビットマップ形式で描画しようとしています。ビルドも無事にでき、実行したのですが、ウィンドウを素早く動かしたり一定時間経ってから動かすとプログラムが停止します。そこで、メモリの使用量をみながら実行したのですが、やはりウィンドウを動かすとメモリ使用量が急激に大きくなり、プログラムが停止していることがわかりました。この改善策として何かアドバイスをいただきたいです。開発環境はVisual Studio C++です。まだまだ初心者で理解不足や説明不足があるかもしれませんが、ご了承ください。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaroToyotomi

2017/12/10 13:49

ソースコードを掲示すると回答が付きやすくなりますよ。
TRON1216.

2017/12/10 13:52

どこのコードを見せればよいのか検討がつかなくて、、、。
yumetodo

2017/12/10 14:06

迷ったときはすべてgithubとかにあげることをおすすめします。(公開して良いコードなら)。まあとりあえずメモリーリークとか無限ループとかその辺を探してみてはどうでしょう
guest

回答2

0

ベストアンサー

これって
ハンドルされない例外、書き込み中にアクセス違反。タイマー関数を使いビットマップ形式で球を描画したいのだが、描画途中で描画されなくなる
で質問された同じプログラムですよね?

であれば、そちらの方に書きましたが、malloc()での確保の仕方(確保場所)がまずいです。

投稿2017/12/11 08:46

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TRON1216.

2017/12/11 16:53

その通りです。では、どこに確保すべきなのでしょうか?また、どうしてまずいのか教えていただけると助かります汗よろしくお願いいたします。
guest

0

こんにちは。

メモリ使用量が急激に大きくなり、プログラムが停止していることがわかりました。

メモリのとりすぎ、もしくは、メモリ解放忘れのどちらかと思います。
メモリをどの程度使用するのか、見積もってみましょう。それより遥かに多くのメモリをだんだんと消費するようならメモリ解放忘れです。獲得したメモリをどこで開放しているのか確認してみましょう。

見積もったメモリ使用量がPCに搭載しているメモリ量に比べて多いようなら、仮想メモリか物理メモリを増やす、もしくは、メモリ使用量を減らすようプログラムを工夫するなどを試みましょう。

ところで、「.bat形式のあるデータ(球体の半径など)」って珍しいですね。拡張子batのファイルは大抵バッチ・ファイルです。シェルスクリプトの一種でコマンド・プロンプトで実行します。

投稿2017/12/10 14:39

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TRON1216.

2017/12/10 17:07

丁寧な回答ありがとうございます。ウィンドウを動かすことと、メモリの使用量は関係ないということでしょうか、?また、メモリの解放のタイミングについてなのですが、この質問の一つ前の質問(いまもなお受付中)で載せているコードについて、解放のタイミングは正しいかどうかよければ確認していただきたいです、、。 拡張子は.datなんですけど中身はcsv形式で書かれているデータです。珍しいのかもわからずやってます(笑)
Chironian

2017/12/10 17:45 編集

> ウィンドウを動かすことと、メモリの使用量は関係ないということでしょうか、? 私はそのようなことは書いていないですよ。どこからその結論を導かれたのか不思議です。 > 解放のタイミングは正しいかどうか WndProc_bitmapの全体が記載されていませんので断定できませんが、症状からするとWndProc_bitmap内で開放のタイミングが間違っている可能性は非常に高いです。(なお、ここにあったら他にはないということにはならないのでご用心。バグはいくらでも作れます。もちろん私には他にもあるかどうかは分かりません。ご自身で確認するしかないです。) さて、WndProc_bitmapについて「獲得したメモリをどこで開放しているのか確認してみましょう。」 見ても良く分からないようでしたら、WndProc_bitmapの頭にブレークポイントを張ってWndProc_bitmap内をステップ実行してみましょう。WndProc_bitmapを抜けたらGoして良いです。辛抱強く頑張れば分かる筈ですよ。
TRON1216.

2017/12/11 05:16

ウィンドウを動かすとどうしてメモリを食うのかわかりましたら教えていただきたいです。それとも様々な要因が重なってその現象が起きるのでしょうか?また、解放はWM_PAINT内だけだと足りないのですね汗ブレークポイントを張ってステップ実行してみます。そういう方法すら知りませんでした。丁寧にありがとうございます。助かります。
Chironian

2017/12/11 05:56

> ウィンドウを動かすとどうしてメモリを食うのかわかりましたら教えていただきたいです。 ウィンドウを動かすと通常はそのウィンドウへWM_MOVEメッセージが通知されます。後は分かるのでは? 他にも様々なメッセージが投げられますよ。
TRON1216.

2017/12/12 10:24

アドバイスありがとうございます。直したことは2つで、g_imgとそのメンバーの初期化をWM_PAINT内に書きました。また、各WMメッセージにfree(g_img.lpBmpData)を書きました。これで実行すると、ウィンドウを動かしてもメモリ使用量は増えず、無事最後のデータまで描画できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問