質問編集履歴

12

heap corruptionの問題でずっとメモ扱いしてたので一応解決まで追記

2019/04/10 07:18

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,29 @@
1
+ ### 解決
2
+
3
+ 「よくわからないけど直った」という最悪のパターンでheap corruptionも発生しなくなりました。
4
+
5
+ 具体的にはDLL内で定義されたクラスの呼び出しを行う際、文字列が引数に含まれており
6
+
7
+ その文字列を直にコンストラクタ引数に書き込んでいたのを、一旦変数に定義してから与えるように変更したらheap corruptionが発生しなくなりました。
8
+
9
+
10
+
11
+ ```c++
12
+
13
+ // DllClass * c = new DllClass("literal", _T("literal"), false);
14
+
15
+ const std::string literal = "literal";
16
+
17
+ const CString mfcLiteral = _T("literal");
18
+
19
+ DllClass * c = new DllClass(literal, mfcLiteral , false);
20
+
21
+
22
+
23
+ ```
24
+
25
+
26
+
1
27
  ### 状況
2
28
 
3
29
  今朝開発機を再起動してデバッグで動作させたところ

11

メモの内容がおかしかったので修正

2019/04/10 07:18

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  ->再現できず。heap corruption発生せず
28
28
 
29
- - DLLの内容を該当プログラムにコピペ
29
+ - DLLの参照を外し、DLLの内容を該当プログラムにコピペ
30
30
 
31
31
  ->再現できず。正常に動作するためソースには問題がないと思われる。DLLとして利用していることが原因?
32
32
 
@@ -47,6 +47,8 @@
47
47
  ただ
48
48
 
49
49
  > デバッガでアタッチしてコールスタックみればいいのではないでしょうか
50
+
51
+
50
52
 
51
53
  との指摘を受け調べたものの実施するにあたってどういう手順を踏めば良いのかよくわからないため進展せずです。
52
54
 

10

コールスタック見ろという指摘に対して

2019/04/04 02:22

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -39,6 +39,16 @@
39
39
  - DLLで使用すると予測不能な不具合を発生させる型が存在するという情報を見かけた(参考URLを控え忘れたので提示できないですが・・・)。ただDLLを使用する別プログラムでは発生しないので原因はかなり込み入ったところにある?
40
40
 
41
41
 
42
+
43
+ #コールスタック?
44
+
45
+ 私のDLLのデバッグ方法が間違っていたようです。
46
+
47
+ ただ
48
+
49
+ > デバッガでアタッチしてコールスタックみればいいのではないでしょうか
50
+
51
+ との指摘を受け調べたものの実施するにあたってどういう手順を踏めば良いのかよくわからないため進展せずです。
42
52
 
43
53
 
44
54
 

9

メモを追加。質問できるくらいコードの提示が出来たらいいんだけど

2019/04/04 02:20

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -10,27 +10,41 @@
10
10
 
11
11
  DLLは静的リンクで呼び出し
12
12
 
13
- DLLから呼び出したクラスのメンバ関数を使わずにnewとdeleteだけ行う
13
+ - DLLから呼び出したクラスのメンバ関数を使わずにnewとdeleteだけ行う
14
14
 
15
15
  -> 効果なし、heap corruption発生
16
16
 
17
- さらに`private: const CString m_str;`なメンバーの`const`をはずす
17
+ - さらに`private: const CString m_str;`なメンバーの`const`をはずす
18
18
 
19
19
  ->効果なし、heap corruption発生
20
20
 
21
- さらにコンストラクタ内で何の処理も行わなくする
21
+ - さらにコンストラクタ内で何の処理も行わなくする
22
22
 
23
23
  -> 効果なし、heap corruption発生
24
24
 
25
- 新しくダイアログベースのプロジェクトを作成し、問題が発生しているプロジェクトと同じタイミングでDLLをnew,deleteする
25
+ - 新しくダイアログベースのプロジェクトを作成し、問題が発生しているプロジェクトと同じタイミングでDLLをnew,deleteする
26
26
 
27
27
  ->再現できず。heap corruption発生せず
28
+
29
+ - DLLの内容を該当プログラムにコピペ
30
+
31
+ ->再現できず。正常に動作するためソースには問題がないと思われる。DLLとして利用していることが原因?
32
+
33
+
34
+
35
+ #憶測
36
+
37
+ - DLLを使用することで発生?DLL側に問題はない(同じDLLを使用している別プログラムではheap corruptionが発生しない)のでDLLの呼び出し側の問題?
38
+
39
+ - DLLで使用すると予測不能な不具合を発生させる型が存在するという情報を見かけた(参考URLを控え忘れたので提示できないですが・・・)。ただDLLを使用する別プログラムでは発生しないので原因はかなり込み入ったところにある?
40
+
41
+
28
42
 
29
43
 
30
44
 
31
45
  参考...
32
46
 
33
- [Heap corruption when returning from function inside a dll|StackOverflow](https://stackoverflow.com/questions/13679104/heap-corruption-when-returning-from-function-inside-a-dll)(読めない
47
+ [Heap corruption when returning from function inside a dll|StackOverflow](https://stackoverflow.com/questions/13679104/heap-corruption-when-returning-from-function-inside-a-dll)(リーディングスキル不足により内容を理解できず・・・
34
48
 
35
49
 
36
50
 

8

heap corruptionの取り組み内容を追加

2019/04/04 02:16

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -21,6 +21,10 @@
21
21
  さらにコンストラクタ内で何の処理も行わなくする
22
22
 
23
23
  -> 効果なし、heap corruption発生
24
+
25
+ 新しくダイアログベースのプロジェクトを作成し、問題が発生しているプロジェクトと同じタイミングでDLLをnew,deleteする
26
+
27
+ ->再現できず。heap corruption発生せず
24
28
 
25
29
 
26
30
 

7

英語のページを読めたかのように書いてたので読めなかった旨追記

2019/03/20 08:43

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  参考...
28
28
 
29
- [Heap corruption when returning from function inside a dll|StackOverflow](https://stackoverflow.com/questions/13679104/heap-corruption-when-returning-from-function-inside-a-dll)
29
+ [Heap corruption when returning from function inside a dll|StackOverflow](https://stackoverflow.com/questions/13679104/heap-corruption-when-returning-from-function-inside-a-dll)(読めない)
30
30
 
31
31
 
32
32
 

6

Markdownの誤記を修正

2019/03/20 08:36

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -24,7 +24,9 @@
24
24
 
25
25
 
26
26
 
27
+ 参考...
28
+
27
- (Heap corruption when returning from function inside a dll|StackOverflow)[https://stackoverflow.com/questions/13679104/heap-corruption-when-returning-from-function-inside-a-dll]
29
+ [Heap corruption when returning from function inside a dll|StackOverflow](https://stackoverflow.com/questions/13679104/heap-corruption-when-returning-from-function-inside-a-dll)
28
30
 
29
31
 
30
32
 

5

ヒープコラプション関係でやったことを追記

2019/03/20 08:35

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,26 @@
5
5
  `エラーはありませんでした`ダイアログは表示されず、先に発生していたheap corruptionの問題だけが残りました。
6
6
 
7
7
  手元で現象が再現しなくなってしまったためクローズにします。ご協力ありがとうございました。
8
+
9
+ ### heap corruptionの問題
10
+
11
+ DLLは静的リンクで呼び出し
12
+
13
+ DLLから呼び出したクラスのメンバ関数を使わずにnewとdeleteだけ行う
14
+
15
+ -> 効果なし、heap corruption発生
16
+
17
+ さらに`private: const CString m_str;`なメンバーの`const`をはずす
18
+
19
+ ->効果なし、heap corruption発生
20
+
21
+ さらにコンストラクタ内で何の処理も行わなくする
22
+
23
+ -> 効果なし、heap corruption発生
24
+
25
+
26
+
27
+ (Heap corruption when returning from function inside a dll|StackOverflow)[https://stackoverflow.com/questions/13679104/heap-corruption-when-returning-from-function-inside-a-dll]
8
28
 
9
29
 
10
30
 

4

DLLについて修正

2019/03/20 08:33

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  原因の切り分けを進めるうち
36
36
 
37
- `DLLから呼び出せるクラスZのコンストラクタ`が原因っぽい?という結論に至りました
37
+ `DLLから静的リンクで呼び出したクラスZのコンストラクタ`が原因っぽい?という結論に至りました
38
38
 
39
39
  そこでその部分だけ`クラスBのコンストラクタ`から抜き出し
40
40
 

3

クローズ

2019/03/20 02:18

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,15 @@
1
+ ### 状況
2
+
3
+ 今朝開発機を再起動してデバッグで動作させたところ
4
+
5
+ `エラーはありませんでした`ダイアログは表示されず、先に発生していたheap corruptionの問題だけが残りました。
6
+
7
+ 手元で現象が再現しなくなってしまったためクローズにします。ご協力ありがとうございました。
8
+
9
+
10
+
11
+ ### 本文
12
+
1
13
  宜しくお願いいたします。
2
14
 
3
15
 

2

翻訳不能な用語を英語に訂正

2019/03/20 01:57

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  その中で自作DLLでIniファイルからの呼び出しを行う処理を行おうとしたのですが
20
20
 
21
- ヒープ汚染が発生していることが判明し
21
+ heap corruptionが発生していることが判明し
22
22
 
23
23
  原因の切り分けを進めるうち
24
24
 
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- そのとき、ヒープ汚染は発生しないものの`エラーはありませんでした`というダイアログが表示されたのです。
35
+ そのとき、heap corruptionは発生しないものの`エラーはありませんでした`というダイアログが表示されたのです。
36
36
 
37
37
  はじめてみるだけならともかく意味不明で
38
38
 
@@ -46,7 +46,7 @@
46
46
 
47
47
 
48
48
 
49
- ヒープ汚染については実際のところ別途検証用プログラムで同様の現象が発生しなかったため
49
+ heap corruptionについては実際のところ別途検証用プログラムで同様の現象が発生しなかったため
50
50
 
51
51
  原因の切り分けも完全に無駄だったと判明し全く解決していないのですが
52
52
 

1

趣旨を文頭に追加

2019/03/20 00:07

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -3,6 +3,10 @@
3
3
 
4
4
 
5
5
  ### 前提・実現したいこと
6
+
7
+ VisualStudioで開発中のC++/MFCアプリがDebug実行中に意味深なダイアログを表示します
8
+
9
+ ダイアログの意味や表示される原因をご存知の方、どうか教えてください。
6
10
 
7
11
 
8
12