Stack around the variable was corrupted

 

 現在寫了一個關於管道的程序,發現一個錯誤

void showInfo(char * data)
{
	char buf[30]={0};
	for(int i=0;i<8;i++){
		sprintf(&buf[i*3],"%02x ",data[i]);
	}
	::MessageBox(NULL,buf,NULL,MB_OK);
}


運行後出錯提示:Run-Time Check Failure # 2-Stack around the variable 'buf' was corrupted.之後把30改成32能正常運行。

參照網上的解決方案:

project->配置屬性->c/c++->代碼生成->基本運行時檢查爲默認值;

在函數前面加#pragma runtime_checks("sc", off),在函數後面加#pragma runtime_checks("sc", restore);

就都不會報錯誤,顯然這種修改編譯選項的方法並不是一個很好的解決方案。

另外有提到vc默認是在8字節對齊的環境下編譯鏈接的,但我試了一下發現buf的大小<=30時都是報錯,>30都是可運行的,和大小是否是8的倍數貌似沒有關係。

不知道爲什麼~~~

http://blog.vckbase.com/arong/archive/2009/12/30/40598.html

發佈了14 篇原創文章 · 獲贊 1 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章