WinMain()…なぜかヒープ破壊(Web APIに接続)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Hina

WinMain()…なぜかヒープ破壊(Web APIに接続)

#1

投稿記事 by Hina » 13年前

お久しぶりです
覚えている人はいないと思いますが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++
です
よろしくお願いします

アバター
結城
記事: 52
登録日時: 13年前
連絡を取る:

Re: WinMain()…なぜかヒープ破壊(Web APIに接続)

#2

投稿記事 by 結城 » 13年前

新しいとこには始めてきたのでユーザー登録してませんでした
後コードをタグでくくるの知らなかったです
すみません
ANGE;ART

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: WinMain()…なぜかヒープ破壊(Web APIに接続)

#3

投稿記事 by softya(ソフト屋) » 13年前

最低限、動くコード全体を提示してもらったほうが答えやすいですが、
char *t01 =(char *)malloc(sizeof(char));
で1バイトしかメモリ確保してませんので、strcpy出来ると思えません。
ここがメモリ破壊の原因だと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
結城
記事: 52
登録日時: 13年前
連絡を取る:

Re: WinMain()…なぜかヒープ破壊(Web APIに接続)

#4

投稿記事 by 結城 » 13年前

ありがとうございます
だとすると
char *t01 =(char *)malloc(sizeof(char));

char *t01 =(char *)malloc(sizeof(char*));
でいいのでしょうか?
しかしこの場合でもまだヒープ破壊は起きます

すいません、コードをあげておきます
添付ファイル
test.zip
ソース群
(6.04 KiB) ダウンロード数: 192 回
ANGE;ART

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: WinMain()…なぜかヒープ破壊(Web APIに接続)

#5

投稿記事 by softya(ソフト屋) » 13年前

WinHttpRequestを使ったことがないので、ちゃんとした方法がわかりませんが、
char *t01 =(char *)malloc(sizeof(char)*(strlen((char*)t)+1));
で大丈夫だと思います。

つまり、strcpyするなら文字列サイズ分のバッファを確保してやらないと駄目っだって事なんですが。
文字列は、'\0'も含めてバッファが必要ですので文字列長に+1したサイズを確保してください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
結城
記事: 52
登録日時: 13年前
連絡を取る:

Re: WinMain()…なぜかヒープ破壊(Web APIに接続)

#6

投稿記事 by 結城 » 13年前

解決できました!!
バッファの長さを取得していないことが原因だったのですね
softya(ソフト屋) さんありがとうございます!
ANGE;ART

閉鎖

“C言語何でも質問掲示板” へ戻る