1

文字列のサイズ変更と連結を行う一般的な関数を作成しようとしていますが、realloc() を呼び出すと、ヒープが破損していることを示す実行時例外が発生します。

//two string pointer initialized with malloc()
wchar_t* stream;
wchar_t* toAdd;

stream = (WCHAR *)malloc(sizeof(wchar) );
toAdd= (WCHAR *)malloc(sizeof(wchar) );

//function declaration
int ReallocStringCat(wchar_t *, const wchar_t *);

//
int ReallocStringCat(wchar_t *dest,const  wchar_t *source)
{
    //below line throws a heap corrupt exception
    *dest =(wchar_t) realloc(dest, wcslen(dest) + wcslen(source) + 1);
    return  wcscat_s(stream,wcslen(dest) + wcslen(source) + 1, source);
}

ポインターとアドレスの使い方がどこか間違っていると確信していますが、それを理解することはできません。

また、CLR/MFC/ATL ライブラリを使用せずにネイティブ Win32 C++ アプリケーション用に Visual Studio 2012 C++ で使用できる可変クラスなどの組み込み関数はありますか?

4

2 に答える 2

3

wchar_t の数ではなくバイト サイズを realloc に指定する必要があります。

dest =(wchar_t *) realloc(dest, (wcslen(dest) + wcslen(source) + 1)*sizeof(wchar_t ));
于 2013-04-27T19:35:03.343 に答える
2
*dest =(wchar_t) realloc(dest, wcslen(dest) + wcslen(source) + 1);

する必要があります

dest =(wchar_t*) realloc(dest, sizeof(wchar_t ) * ( wcslen(dest) + wcslen(source) + 1) );

destが変更され、関数によって返されないため、メモリリークも発生しています。

于 2013-04-27T19:22:59.387 に答える