这可能是一个菜鸟问题。我正在使用果酱 SDK。如果我为 char 数组动态分配一些内存,我会遇到访问冲突。我无法弄清楚我做错了什么。这是使用 malloc 和 free 的有效方式吗?
const char* CClass::caption(int something)
{
...
//char stringPrediction[2000]; // <--- This works
size_t string01_Size = strlen(string01);
size_t string02_Size = strlen(string02);
...
stringX = (char *)malloc(string01_Size + string02_Size + 1); // <- Access violation
strcpy(stringX , string01);
strcat(stringX , " ");
strcat(stringX , string02);
return stringX ;
}
析构函数:
CClass::~CClass(void)
{
free(stringX);
}
然后我用它在按钮点击事件上设置标签的标题
... OnClick...(...)
{
CClass someObject;
label.setCaption(someObject.caption());
}
单击几下后,我得到访问冲突。
Unhandled exception at 0x1007ECB8 (s3e_simulator_debug.dll) in
s3e_simulator_debug.exe: 0xC0000005: Access violation writing
location 0x0000000C.
编辑:看来问题是:
stringX = (char *)malloc(string01_Size + string02_Size + 1);
我没有为此分配空间:
strcat(stringX , " ");
这应该更好:
stringX = (char *)malloc(string01_Size + 1 + string02_Size + 1);