C++未解決

+ CLRで_bstr_tを使うとAssertが…
CLRで_bstr_tを使うとAssertが…

_bstr_t str = "test";

_CrtIsValidHeapPointerでエラーが出ます。
CLRを使わずにコンパイルすると問題ないです。

+ sprintf_sのオーバーロード
sprintf_s()のオーバーロード
sprintf_s()に限った話ではないとは思うが、今回はこの関数で
発生したので例に挙げてみた。

char buff[8];
sprintf_s( buff, ......);

だと、sprintf_s()の解釈は

int sprintf_s<size_t _Size>(char (&) _Dest[_size], const char * _Format, ...)

がオーバーロードされる。
ここで、buffを関数の引数にして

void func( char *buff )
{
        sprintf_s( buff, ......);
}

だと、sprintf_s()の解釈は

int sprintf_s( char * _DstBuff, size_t _SizeInBytes, const char * _Format, ...)

がオーバーロードされる。
この解釈の差は何なんだろうか…?

sprintf_sのヘルプを見てみるとそもそもこの関数は格納バッファのサイズを指定するのがデフォルトとなっていて、オーバーロードによってサイズの引数を指定しなくてもいいようになっているらしい。これはセキュリティ保護されたテンプレートのオーバーロードによって実装されているようだが、ここら辺を追っていけば原因が分かるっぽい。っていうか、常にサイズ指定すればこんなこともないんだけども…。
最終更新:2008年09月30日 11:45
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。