none
Windows has triggered a breakpoint ... RRS feed

  • 質問

  • C++初心者です。

    下記のようなコードを実行したところ、下記メッセージが表示されました。

    -------------------------------------------------------------

    Windows has triggered a breakpoint in test.exe.

    This may be due to a corruption of the heap, which indicates a bug in test.exe or any of the DLLs it has loaded.

    This may also be due to the user pressing F12 while test.exe has focus.

    The output windows may have more diagnostic information.

    -------------------------------------------------------------

    PCはWindows10で、Visual Studioは2010 Professionalを使用しています(バージョンが古すぎるのがわかっていますが、事情により、このバージョンしか使えません)

    コードのどこかが間違っていると思っていますが、どこが問題なのかわからなくて、

    ご教授していただければと思います。

    よろしくお願いします。


    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    typedef struct
    {
    	char* wdStr;
    	int left;
    	int right;
    	int top;
    	int bottom;
    
    } WORDINFO;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int i, j;
    
    	WORDINFO* wdInTRNameArea = (WORDINFO *)malloc(sizeof(WORDINFO) * 256);
    	WORDINFO* wdInTRNameArea_1 = (WORDINFO *)malloc(sizeof(WORDINFO) * 256);
    	WORDINFO* wdInTRNameArea_2 = (WORDINFO *)malloc(sizeof(WORDINFO) * 256);
    	for (j=0; j<242; j++)
    	{
    		for (i=0; i<256; i++)
    		{
    			wdInTRNameArea[i].wdStr = (char*)"this is test " + i;
    			wdInTRNameArea[i].left = 1;
    			wdInTRNameArea[i].top = 2;
    			wdInTRNameArea[i].bottom = 3;
    			wdInTRNameArea[i].right = 4;
    
    			wdInTRNameArea_1[i].wdStr = (char*)"this is test " + i;
    			wdInTRNameArea_1[i].left = 1;
    			wdInTRNameArea_1[i].top = 2;
    			wdInTRNameArea_1[i].bottom = 3;
    			wdInTRNameArea_1[i].right = 4;
    
    			wdInTRNameArea_2[i].wdStr = (char*)"this is test " + i;
    			wdInTRNameArea_2[i].left = 1;
    			wdInTRNameArea_2[i].top = 2;
    			wdInTRNameArea_2[i].bottom = 3;
    			wdInTRNameArea_2[i].right = 4;
    		}
    		free(wdInTRNameArea);
    		free(wdInTRNameArea_1);
    		free(wdInTRNameArea_2);
    	}
    
    	cout << "End" << endl;
    
    	return 0;
    }


    2021年4月14日 10:09

回答

  • おそらく原因は2重ループの中で、free() を何度も呼び出していることが原因だと思います。

    おそらくj=1 の時の free() でエラーが出ていると思いますが、確認したわけではないので、デバッグ実行あるいは、ステップ実行してエラーがどこで出ているかを自分で確認してみることをお勧めします。


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    • 回答としてマーク yuan2xiao4 2021年4月15日 0:32
    • 回答としてマークされていない yuan2xiao4 2021年4月15日 0:33
    • 回答としてマーク yuan2xiao4 2021年4月15日 0:33
    2021年4月14日 13:34

すべての返信

  • おそらく原因は2重ループの中で、free() を何度も呼び出していることが原因だと思います。

    おそらくj=1 の時の free() でエラーが出ていると思いますが、確認したわけではないので、デバッグ実行あるいは、ステップ実行してエラーがどこで出ているかを自分で確認してみることをお勧めします。


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    • 回答としてマーク yuan2xiao4 2021年4月15日 0:32
    • 回答としてマークされていない yuan2xiao4 2021年4月15日 0:33
    • 回答としてマーク yuan2xiao4 2021年4月15日 0:33
    2021年4月14日 13:34
  • とっちゃん さん

    ご回答ありがとうございます。

    ステップ実行したところ、jのループで1周目は問題なかったですが、

    2周目でfree()のところでエラーが出ました。

    free()をjループの外に置いたら、最後まで実行できました。


    C++は習い始めで、こちらにまた質問させていただくことがあると思いますが、

    その際はまたよろしくお願いします。

    ありがとうございました。
    2021年4月15日 0:33