此源代碼有什麼問題?C++,CBuilder 2010中傳遞參數時的ostream錯誤
#include <iostream>
#include <ostream>
#include <fstream>
void printTest (std::ostream * o)
{
*o << "test" << std::endl;
}
int main (int argc, char * argv[])
{
std::ostream * o = &std::cout;
char ot[4096];
strcpy (ot, "test.txt");
strcat (ot, ".log");
static std::ofstream of (ot);
printTest (o); //Print to console OK
o = & of;
printTest (o); //Print to file: CodeGuard stops the application with the error log
return 0;
}
我試圖在CBuilder 2010(啓用CodeGuard)下編譯此源代碼。該應用程序已被CodeGuard停止並顯示以下錯誤日誌:
25.12.2011 13:00:57 started a CodeGuard(tm) process: Project3.exe(2244)
Bad parameter in process: Project3.exe(2244) - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/fstream#55
A bad file or pipe stream (0x32AF36D4) has been passed to the function.
0x0040A150 Call to fputc(0x74 ['t'], 0x32AF36D4)
0x004098A5 - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/fstream#55
0x004081BE - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/fstream#246
0x00407E2B - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/streambuf#465
0x004020AD - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/streambuf#151
0x00401434 - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/ostream#683
0x00401276 - File3.cpp#13
Pointer arithmetic underrun in process: Project3.exe(2244) - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/streambuf#207
0x00892501-512, that is at offset 1-512 in heap block 0x00892500 (size 512).
0x0040985E - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/streambuf#207
0x00408127 - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/fstream#237
0x00407E2B - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/streambuf#465
0x004020AD - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/streambuf#151
0x00401434 - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware/ostream#683
0x00401276 - File3.cpp#13
The memory block (0x008922F0) [size: 512 bytes] was allocated with calloc
0x32A9D14F
0x004057B7 - c:\program files\embarcadero\rad studio\7.0\include\dinkumware\xlocale#1289
0x00404DDA - c:\program files\embarcadero\rad studio\7.0\include\dinkumware\xlocale#1261
0x004041F1 - c:\program files\embarcadero\rad studio\7.0\include\dinkumware\xlocale#1268
0x00403395 - c:\program files\embarcadero\rad studio\7.0\include\dinkumware\xlocale#323
0x004022AB - c:\program files\embarcadero\rad studio\7.0\include\../include/dinkumware
感謝您的幫助。
更新問題:
不幸的是,這是一個較舊的和報告的bug: http://www.borlandtalk.com/is-there-a-bug-in-codeguard--vt112810.html
主題可以關閉...
你錯過了一個頭(''),但除此之外,你的代碼看起來_really twisted_爲它做什麼。爲什麼所有這些併發症? –
Mat
2011-12-25 11:37:09
是的,它看起來很複雜。但這只是一個測試例子,我嘗試將相同的數據寫入控制檯和文件。 – justik 2011-12-25 11:46:23
你可以讓'''不是靜態的嗎? – 2011-12-25 12:20:17