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