realloc()上的堆已损坏

时间:2013-04-27 19:21:59

标签: c++ visual-studio-2012

我正在尝试编写一个通用函数来调整大小和连接字符串但是在调用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 ++中可用的内置函数,如可变类吗?

2 个答案:

答案 0 :(得分:3)

您需要在realloc:

中提供字节大小而不是wchar_t的数量
dest =(wchar_t *) realloc(dest, (wcslen(dest) + wcslen(source) + 1)*sizeof(wchar_t ));

答案 1 :(得分: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正在更改,而不是由函数返回。