お久しぶりです
覚えている人はいないと思いますがHina(Yuno)です
今回、C++でWeb APIに頼るソフトを設計しようと思ったのですが
のっけからつまずいてしまいました
Web の接続は何とかなっていますが、Xml実装について質問しようかと思った矢先
以下のコードでヒープ破壊が起きてしまいました
見たところ二重開放などは行っていません
しかも、ヒープ破壊が起きるのはWinMainから返ってきたあたりです
ますますわけがわかりません
どなたか教えてください
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
::CoInitialize(NULL);
WinHttp::IWinHttpRequestPtr Request;
Request.CreateInstance(WinHttp::CLSID_WinHttpRequest);
Request->Open(L"GET", L"http://jlp.yahooapis.jp/MAService/V1/pa ... は二羽ニワトリがいる。");
Request->Send();
std::cout << Request->ResponseText;
_bstr_t t = Request->ResponseText;
char *t01 =(char *)malloc(sizeof(char));
strcpy(t01,(char *)t);
::CoUninitialize();
while(ProcessLoop()==0){//メインループ
DrawXmlStringEx(0,0,t01,GetColor(255,255,255));
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了処理
return 0;
};
開発環境は
Win XP Home Sp3
Visual Studio 2005 C++
です
よろしくお願いします
WinMain()…なぜかヒープ破壊(Web APIに接続)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: WinMain()…なぜかヒープ破壊(Web APIに接続)
最低限、動くコード全体を提示してもらったほうが答えやすいですが、
char *t01 =(char *)malloc(sizeof(char));
で1バイトしかメモリ確保してませんので、strcpy出来ると思えません。
ここがメモリ破壊の原因だと思います。
char *t01 =(char *)malloc(sizeof(char));
で1バイトしかメモリ確保してませんので、strcpy出来ると思えません。
ここがメモリ破壊の原因だと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: WinMain()…なぜかヒープ破壊(Web APIに接続)
WinHttpRequestを使ったことがないので、ちゃんとした方法がわかりませんが、
char *t01 =(char *)malloc(sizeof(char)*(strlen((char*)t)+1));
で大丈夫だと思います。
つまり、strcpyするなら文字列サイズ分のバッファを確保してやらないと駄目っだって事なんですが。
文字列は、'\0'も含めてバッファが必要ですので文字列長に+1したサイズを確保してください。
char *t01 =(char *)malloc(sizeof(char)*(strlen((char*)t)+1));
で大丈夫だと思います。
つまり、strcpyするなら文字列サイズ分のバッファを確保してやらないと駄目っだって事なんですが。
文字列は、'\0'も含めてバッファが必要ですので文字列長に+1したサイズを確保してください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: WinMain()…なぜかヒープ破壊(Web APIに接続)
解決できました!!
バッファの長さを取得していないことが原因だったのですね
softya(ソフト屋) さんありがとうございます!
バッファの長さを取得していないことが原因だったのですね
softya(ソフト屋) さんありがとうございます!
ANGE;ART