2011-12-25 10 views
2

このソースコードで何が問題になっていますか?CBuilder 2010で引数を渡すとC++、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; 
} 

Iは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 

ありがとうございました。

更新質問:

残念ながら、これは古いですし、バグを報告しました: http://www.borlandtalk.com/is-there-a-bug-in-codeguard--vt112810.html

トピックが...

+0

( '')が、離れてあなたのコードは_reallyそれが何のためにtwisted_見えることから。なぜこのすべての合併症? – Mat

+0

はい、それは複雑に見えます。しかし、それは単なるテストの例です、私はコンソールとファイルの両方に同じデータを書き込もうとします。 – justik

+0

静的ではない 'of'を作ることができますか? –

答えて

1

を閉じることができますが、静的ランタイムとリンクして、プロジェクトをビルドしてみます。あなたは下のオプションをオフにして、それを行うことができます:あなたは、ヘッダーが欠落している

C++ Builder 2007

+0

あなたの答えをありがとう。私は "Dynamic RTL"をチェックし、 "Full Debug ..."と "Disable incremental ..."をチェックしましたが、同じ結果が出ました。 – justik

関連する問題