2011-12-25 69 views
2

此源代碼有什麼問題?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

主題可以關閉...

+0

你錯過了一個頭(''),但除此之外,你的代碼看起來_really twisted_爲它做什麼。爲什麼所有這些併發症? – Mat 2011-12-25 11:37:09

+0

是的,它看起來很複雜。但這只是一個測試例子,我嘗試將相同的數據寫入控制檯和文件。 – justik 2011-12-25 11:46:23

+0

你可以讓'''不是靜態的嗎? – 2011-12-25 12:20:17

回答

1

嘗試通過對運行時靜態鏈接建設項目。你可以做到這一點通過取消選中下面的選項:

C++ Builder 2007

+0

感謝您的回答。我檢查了「動態RTL」並檢查「完全調試...」和「禁用增量...」,但結果相同。 – justik 2011-12-25 13:36:51