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

您需要在 realloc 中提供字节大小而不是 wchar_t 的数量:

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 回答