HEAP CORRUTOPN DETECTED: AFTER Normal block(c# 179)
at 0x003EA6D0

CRT detected that the application wrote to memory after
end of heap buffer;

というエラーがでたのですが、最後の二行を訳すと、
ヒープ領域が終わったあとにアプリケーションがメモリーに書き込んだ
のをCRTが発見したということになると思うのですけど、
これは、ヒープを使い切ったということになるのでしょうか?
それとも、本来上書きしてはならないヒープの部分に上書きしたことに
なるのでしょうか?
ネットで今調べているのですがなかなか結論が出せなくて。

A 回答 (2件)

ここに解説があります


http://msdn.microsoft.com/ja-jp/library/ms810466 …

”ヒープの破損によりスローダウンが起こる”
が該当すると思われます。
    • good
    • 0

newなどで確保したサイズ以上の領域にデータを書き込んだ、


つまりは後者のバグがあるということです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事アクセス違反のメモリーを発見しました。
三個しか確保していない配列の三番目の領域にアクセスしてました

お礼日時:2009/05/14 06:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q冠状動脈循環不全について教えて下さい

40代女性です。
職場での集団健康診断を受けた結果、「冠状動脈循環不全」と診断されました。
この病名についてネットで検索しても、今ひとつ意味が分かりません。
いったいどういう内容で、どういった危険があるのでしょうか。
またどういった対策を心がけたらいいでしょうか。
御指南願います。

Aベストアンサー

「冠状動脈循環不全」略して冠不全とされることもありますが言葉だけの意味は#1の方のような解釈となります。
しかし、職場健診とのことなのでおそらく普通の心電図の結果でT波平低や逆転T波が見られこの所見付いているのでしょうが、この検査だけでは本当にこうした状態であるかの判断はできません。
特に40台前後の女性では特別に心臓疾患が無い方でも中途半端な波形変化を認めることが多くあり、こうした変化を表現するのに波形上の特徴の用語ではなく病気的な表現にむりやりしようとしてこれらの用語を用いる医師もいます。
こうした波形の方に将来狭心症や心筋梗塞が特別多いといった印象もありませんし、閉経以前の女性にはこれらの疾患は少ないものです。
循環器の専門医は最近用いない用語です。
もちろん、何らかの症状や高血圧などがあれば専門医にご相談ください。

参考URL:http://ns.gik.gr.jp/~skj/arrhythmia/kensin-ecg.php3,http://www.hamt.or.jp/KENSA/MSTAFF/ECG/vdefect.html

「冠状動脈循環不全」略して冠不全とされることもありますが言葉だけの意味は#1の方のような解釈となります。
しかし、職場健診とのことなのでおそらく普通の心電図の結果でT波平低や逆転T波が見られこの所見付いているのでしょうが、この検査だけでは本当にこうした状態であるかの判断はできません。
特に40台前後の女性では特別に心臓疾患が無い方でも中途半端な波形変化を認めることが多くあり、こうした変化を表現するのに波形上の特徴の用語ではなく病気的な表現にむりやりしようとしてこれらの用語を用い...続きを読む

Qクリティカルエラー Expression: ("Buffer too small", 0)

VC++2005でコンパイルしたアプリですが、実行すると
クリティカルエラーの次のメッセージが表示されました。
VCの設定で解決できるものなのでしょうか?


Microsoft Visual C++ Debug Library

...

Expression: ("Buffer too small", 0)

Foi infomation how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(press Retry debug the application)

Aベストアンサー

このメッセージはセキュア関数でバッファを飛ばした時に出ます。
プログラムに問題がありますので、VCの設定ではなく問題部分を
突き止めて修正しなければダメです。

Q椎骨脳底動脈循環不全症、 小脳梗塞・脳幹梗塞の類の症状ですが、、

椎骨脳底動脈循環不全症、 小脳梗塞・脳幹梗塞の類の症状ですが、、
患側に限局して、血行不良の結果、目の光のちらつき感、目の暗順応低下、視野縮小、その他に耳の症状として、内耳性めまい症状、めまいに伴う足の痺れ感、BPPVの発症などが、起こりうるでしょうか?
また、これらは、脳の血管MRIで発見可能でしょうか?

Aベストアンサー

MRIに関してですが、椎骨脳底動脈系の狭搾、すでに起きてしまった脳梗塞などは画像上確認できる可能性があります。
さて、血行不良の結果起きる症状ですが・・。
めまいはともかく、めまいに伴う足のしびれ感とは何でしょうか?めまいに足のしびれが随伴するということは典型的ではありません。目のちらつき感、暗順応低下は脳の病変で起きうるでしょうか?視野の縮小は、後頭葉の障害で同名半盲が出る可能性はあります。

いずれにせよ、ご心配なら神経内科を受診し、お書きになった症状を訴えて検査を受けることをお勧めします。

QOut Of Near Heap Space?

宜しくお願いします。Quick C(MsDos上)でプログラムしています。1300行くらいのものですが、コンパイル時に「Out Of Near Heap Space」とエラーが出るようになりました。マニュアルにも対策が書いてありません。原因が分かりません。どなたか教えてください。お願いします。

Aベストアンサー

コンパイラによって対応の方法が違うとは思うんですけど…

昔、私がシンボルテーブルでハマった時の対応は

・グローバル変数をとにかく減らす
すべてのグローバル変数を1つの構造体にまとめて、グローバル変数は構造体変数一つにしました。
コンパイラによって無意味かもしれませんが、私の使っていたコンパイラは構文解析段階で構造体メンバをオフセット参照していたのでオッケーでした。
構文解析段階でシンボルテーブルを使って、コードジェネレーションでオフセットに変換するタイプのコンパイラではだめかもしれません。

・プリプロセスを先にかけてしまう
プリプロセッサと構文解析を段階的にではなく、一気にやってしまうタイプのコンパイラではdefineシンボル用のシンボルテーブルとその他のシンボルテーブルが混在するため、メモリをたくさん使います。
プリプロセッサを先にかけてしまうことでdefineシンボル用のシンボルテーブルを分離します。
Jhonson-Cみたいに元々プロプロセッサと構文解析が分離しているコンパイラでは無意味です。

私がメモリ不足を経験したコンパイラは
MS-DOS用のLattice-C
MS-DOS用のMS-C
Flex-OS(コンカレントCP/Mの拡張OS)用のHi-Tech C

初期バージョンのMS-CはLattice-CのOEMだったので実質同じモノだったのかもしれません。
あるバージョンまでのQuick CはMS-Cのサブセットだったので効果あるかも?

コンパイラによって対応の方法が違うとは思うんですけど…

昔、私がシンボルテーブルでハマった時の対応は

・グローバル変数をとにかく減らす
すべてのグローバル変数を1つの構造体にまとめて、グローバル変数は構造体変数一つにしました。
コンパイラによって無意味かもしれませんが、私の使っていたコンパイラは構文解析段階で構造体メンバをオフセット参照していたのでオッケーでした。
構文解析段階でシンボルテーブルを使って、コードジェネレーションでオフセットに変換するタイプのコンパイラでは...続きを読む

Q環軸推亜脱臼と脳低動脈循環不全について

この2つはどういう病気なのかご存知の方、教えてください。また、どういう点に注意をすればよいかもお願い致します。ヘルパーの仕事をしていますが、利用者の方が関節リュウマチで、この病気もあり、手術はできないとの事なので、どう注意しながら接すればよいか是非知りたいのでよろしくお願い致します。

Aベストアンサー

首の骨の一番上(第一頚椎、環椎)と二番目の骨(軸椎が)ずれている病気です。原因はリュウマチで骨や間接がぼろぼろになっていることだと思います。リュウマチがひどくて、ステロイド長期内服中の場合は手術は不可能です。首をひねったりすると、延髄が圧迫されて急死することもありますので、手術不可能な場合は、頚椎カラーなどの装具による安全対策が必要です。椎骨脳底動脈潅流不全の原因になることもあります(椎骨動脈は環椎の骨の中を通過しており、骨が変性してあなが狭くなったり、ずれたりします)。

いずれにしても介護上の注意としては
頚部の安静を保ちつつ急な姿勢の変化を避けることです。

参考までに

QDetected memory leaks!

VS2010を使用しています。
複数人で同じプロジェクトを編集しています。
いつからか「Detected memory leaks!」が多発するようになり、Dumping Objectsの結果からいくつかは修正できたのですが、
----------------------------------------
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {34985} normal block at 0x05ECE620, 104 bytes long.
Data: < }R+ + > 84 CF 7D 52 2B 00 00 00 2B 00 00 00 01 00 00 00
----------------------------------------
上記の内容だけは意味がわかりません。
他の回答に「_CrtDumpMemoryLeaks」の実行場所をできるだけ後にするというようなことで対策できたようですが、このプロジェクトでは、記述していません。(明示的には実行していない)

何か、何かアドバイスをいただけたら助かります。
よろしくお願いいたします。

VS2010を使用しています。
複数人で同じプロジェクトを編集しています。
いつからか「Detected memory leaks!」が多発するようになり、Dumping Objectsの結果からいくつかは修正できたのですが、
----------------------------------------
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {34985} normal block at 0x05ECE620, 104 bytes long.
Data: < }R+ + > 84 CF 7D 52 2B 00 00 00 2B 00 00 00 01 00 00 00
----------------------------------------
上記の内容だけは意味がわ...続きを読む

Aベストアンサー

初めまして。ゲーム業界でメインPGやっている者です。プログラマ歴は10年位です。

エラーメッセージから推測するに、CRTデバッガが吐き出すリーク検知時のメッセージでしょうか。
(メモリアロケータ等は自作でCRT等のツールは使った事無いので分かりませんが・・)

コードが無いので何とも言えませんが、そのメッセージ自体は調べたところ、
MFCのstrcore.cpp156行目の処理によるエラーで34985回目のメモリ確保時に出ている様です。
(3万回以上経ってなら、大方のリークは潰した後の小さなリークの累積なんでしょうね。骨が折れている事と思います)

その際のメモリ確保はヒープ上の0x05ECE620と言うアドレスから始まっていますが、104バイトのメモリブロックが未解放。
(解放していないメモリブロック上に確保をかけて失敗している)

そして、その失敗しているメモリブロックの中身は、}R+ + となっている。
その}R+ + をバイナリとして表すと、84 CF 7D 52 2B 00 00 00 2B 00 00 00 01 00 00 00

と言うのが直訳した結果です。

VC上のIDEであればヒープ位置は変わらないと記憶しているので、
・0x05ECE620と言う数値が何度実行しても変わらないのであればそのアドレスが変更された際にブレークをかける
・104バイト確保と言う事なので、そのサイズの構造体やクラスに心当たりが無いか考える
・使用している実値データに84 CF 7D 52 2B 00 00 00 2B 00 00 00 01 00 00 00が無いか
・MFCのstrcore.cppが見えるなら156行目にブレークを貼ってコールスタックを追う。
等から追跡して、そのデータの確保タイミングを見つける位は出来るかも知れません。

この手の事例は単に生成順と解放順が管理されていない事による不整合が大半だと思います。
綺麗にクラス化された設計なら、該当しそうなオブジェクトのデストラクタと、新オブジェクトのコンストラクタにトレースなりブレークを貼って、順番のおかしい箇所を探すのが、地味で手間に見えますが確実です。

リークは大変ですよね。
起きた際の事後解決能力も必要ですが、起こさない為の工夫も、考えると山ほどあります。
是非がんばって下さい。

初めまして。ゲーム業界でメインPGやっている者です。プログラマ歴は10年位です。

エラーメッセージから推測するに、CRTデバッガが吐き出すリーク検知時のメッセージでしょうか。
(メモリアロケータ等は自作でCRT等のツールは使った事無いので分かりませんが・・)

コードが無いので何とも言えませんが、そのメッセージ自体は調べたところ、
MFCのstrcore.cpp156行目の処理によるエラーで34985回目のメモリ確保時に出ている様です。
(3万回以上経ってなら、大方のリークは潰した後の小さなリークの累積なんでし...続きを読む

QCRTより液晶に換えた方がいいでしょうか

そろそろパソコンを買い換えようかなと考えています。
そこでモニタについて教えてもらえませんか?

数年前に液晶とCRTだったらCRTのほうがきれいだと言われて以来、
CRTを使ってきました。
ゲームとかやるのできれいに見たいのです。
でも今はモニタの主流は液晶ですよね。
今でもやはり数がないだけでCRTのほうがきれいなのでしょうか?

液晶もピンキリだと思いますが、
その辺もいろいろな考えを教えていただけたらと思います。
ある程度の安さでCRTと同じくらいの物が買えるのなら
液晶にしようかと思っています。
もうCRTは入手不可ですかねぇ。

Aベストアンサー

 液晶の安いものはCRTより表示できる色の数がすくないです
 CRTとちがって液晶は見る角度で色が変わります。
 また、液晶のほうがCRTより反応速度が遅いです。
 
 なので、お値段が高め(というか高品質)の液晶を
買わないとCRTのほうが良かったと感じるかもしれません。

お使いになられているCRTのきれいさによって変わってきますが、
24インチで12万円クラスの液晶でしたら、液晶のほうが綺麗でしょう。
2~3万円ぐらいの液晶でしたらCRTと同等かCRTの方が綺麗でしょう。

これから液晶買われるのでしたらポイントを。
・最大表示色
  ×:約1619万色・擬似フルカラー
  ○:約1677万色
  擬似フルカラーは、人間の目の錯覚を利用して色表示をしていますのでCRTより色がキタナイです。

・液晶のパネル(の方式)
  CRTから乗り換えるのでしたら、反応速度・視野角がポイントです
  ×:TN方式
  ○:VAあるいはIPS方式

 17~19インチ 5万
 20ワイド~24ワイド 11万
を見ておくと後悔しない品質の液晶が買えます。
 
 

 液晶の安いものはCRTより表示できる色の数がすくないです
 CRTとちがって液晶は見る角度で色が変わります。
 また、液晶のほうがCRTより反応速度が遅いです。
 
 なので、お値段が高め(というか高品質)の液晶を
買わないとCRTのほうが良かったと感じるかもしれません。

お使いになられているCRTのきれいさによって変わってきますが、
24インチで12万円クラスの液晶でしたら、液晶のほうが綺麗でしょう。
2~3万円ぐらいの液晶でしたらCRTと同等かCRTの方が綺麗でしょう。

これから液晶買われ...続きを読む

Qヒープの探索の再帰

A[N]を利用したヒープのプログラムを作りました。
A[i]の親は、A[(i-1)/2]であるヒープです。
(上に行くほど小さい整数を格納)
そしていまある整列されたヒープのなかからキーボードから入力した値xを検索する関数findを、
x ←検索する値
A[]←ヒープソートされた配列
n ←格納されているA[]の最後の添え字
として、

int find(int x, int *A, int i, int n)
{


if(A[i]==x){
printf("*\n"); /* ここの作業が行われているかを確認 */
return 1;
}

if(i>n)return 0;
if(A[i]>x){
return 0;
}
else if (A[i]<x){
i = 2*i + 1;
find(x, A, i, n);
i++;
find(x, A, i, n);
}
return 0;
}

というものを作ってみました。汚いかもしれませんが、とりあえず今はこれでいっぱいいっぱいです。
それで、当然のごとくうまくいきませんでした。
/**/内に書いたように、入力したxがヒープ内にある場合は「*」が一応表示されるのですが、どうもfindは1を返してくれません。0を返してしまいます。見つけた後もまだ再帰をくりかえしえしているようです。
どこがいけないのでしょうか。

A[N]を利用したヒープのプログラムを作りました。
A[i]の親は、A[(i-1)/2]であるヒープです。
(上に行くほど小さい整数を格納)
そしていまある整列されたヒープのなかからキーボードから入力した値xを検索する関数findを、
x ←検索する値
A[]←ヒープソートされた配列
n ←格納されているA[]の最後の添え字
として、

int find(int x, int *A, int i, int n)
{


if(A[i]==x){
printf("*\n"); /* ここの作業が行われているかを確認 */
return 1;
}

if(i>n)return 0;
if(A[i]>x){
return 0;
...続きを読む

Aベストアンサー

findを再帰呼び出しする部分で、findの戻り値が1だったら return 1; としないと駄目なのでは?
(第一印象なので、テストしてません)

QNECの9821Ce2のCRTについて

古いパソコンのNECの9821Ce2のCRTが壊れてしまいました WIN98が映るのを確認して捨て値で出物を購入して接続しましたが 画面がちらついてしまい うまく映りません
CRTのスイッチを入れて すぐにGRAPH+1やGRAPH+2を押してもちらつきます
CRTの形式はNECのD15A1です 
やはり9821Ce2の純正CRTでないと駄目でしょううか
マイクロコンピュウターPICの書きこみに使うので 今のパソコンでは使えないし ドットプリンターにも使うので捨てるわけにいかないのです
どなたかCRTの取り扱いについて教えて

Aベストアンサー

残念ながらPC-9821Ce2にはGRPH+1/2による
水平周波数(24.8kHz/31.5kHz)の変更は出来ません。
起動時は24.8kHz固定です。

ですから24.8kHz対応のモニタを買ってくるしか
ありません。ただし、24.8kHz対応品は少数派です。
アップスキャンコンバータという方法もありますが
高価なのでお勧めはしません。

Win98が既にインストールしてあるのであれば、
しばらく待ってみると画面表示が31.5kHzになった
時点で640x480の解像度でWin98が表示されるはずです。

なおPC-9821Ce2の付属モニタは640x480が表示限度
なのでそれ以上の解像度が設定されていた場合も
表示がうまく出来ませんのでご注意ください。

QBuffer overrun, data ..

メールソフトで、openssl を使って、
ヤフーメールにPOP接続して、800個ほど溜まっているメールを取り出そうとしています。

メッセージID を確認しながら重複しないように取り出そうとしています。
700個ほど取り出したのですが、
その後、頻繁に

Buffer overrun, data truncated

のメッセージが出て、ストップします。

このメッセージはopenssl が作成しているのでしょうか?
また、原因、対策はなんでしょうか?

Aベストアンサー

http://oshiete.goo.ne.jp/qa/8198656.html
↑を見る限り自分でメッセージを出しているのでは?
その通りであれば、原因や対策も見えてくるはずです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング