c ++在free()上崩溃

时间:2017-03-25 13:25:38

标签: c++ crash

我遇到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

2 个答案:

答案 0 :(得分:2)

该缓冲区在堆栈上分配;你只需要释放堆内存,即用malloc或类似函数分配的内存。堆栈内存自动处理。

你的另一个问题似乎是你将缓冲区转换为int而非int数组,而不是void指针。

答案 1 :(得分:1)

free()是一个C函数,只能在malloc()分配的内存中使用,如果你的标签是真的,你必须尽量避免这种情况。转换为int的指针是UB,指针实际上不是整数值,可能与int的大小不同。如果您需要无类型地址,则应使用void *。