我遇到free()问题;所有时间我的应用程序崩溃,没有它的工作,但一些发送的数据包只是崩溃。 这可能有什么不对?任何人都可以帮助我,谢谢。
unsigned char buf[1024];
int size = 0, len;
wchar_t *wstr;
va_list args;
va_start(args, Format);
while (*Format != 0)
{
switch (*Format)
{
case 'b':
len = va_arg(args, unsigned int);
memcpy(buf + size, va_arg(args, void*), len);
size += len;
break;
default:
// command on unknown
break;
}
Format++;
}
va_end(args);
true_SendPacket(This, "b", size, (int)buf);
free(buf); // this line
答案 0 :(得分:2)
该缓冲区在堆栈上分配;你只需要释放堆内存,即用malloc
或类似函数分配的内存。堆栈内存自动处理。
你的另一个问题似乎是你将缓冲区转换为int而非int数组,而不是void指针。
答案 1 :(得分:1)
free()是一个C函数,只能在malloc()分配的内存中使用,如果你的标签是真的,你必须尽量避免这种情况。转换为int的指针是UB,指针实际上不是整数值,可能与int的大小不同。如果您需要无类型地址,则应使用void *。