Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;免费撞车_C++_Crash - Fatal编程技术网

C++ c++;免费撞车

C++ c++;免费撞车,c++,crash,C++,Crash,我有免费的问题;所有时间我的应用程序崩溃,没有它的工作,但一些发送的数据包只是崩溃。 这里有什么问题?任何人都可以帮我,谢谢 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

我有免费的问题;所有时间我的应用程序崩溃,没有它的工作,但一些发送的数据包只是崩溃。 这里有什么问题?任何人都可以帮我,谢谢

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

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


您的另一个问题似乎是将缓冲区强制转换为int而不是int数组,而不是空指针。

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


您的另一个问题似乎是将缓冲区强制转换为int而不是int数组,而不是空指针。

free()是一个C函数,只能在malloc()分配的内存上使用,如果标记为true,则必须尝试完全避免这种情况。将指针强制转换为int是UB,指针实际上不是整数值,可能大小与int不同。如果需要非类型化地址,应使用void*

free()是一个C函数,只能在malloc()分配的内存上使用,如果标记为true,则必须尝试完全避免。将指针强制转换为int是UB,指针实际上不是整数值,可能大小与int不同。如果需要非类型化地址,应使用void*

函数需要一个
void*
,因此我们必须传递它。它是常见的,但对于C++代码< int > <代码>和<>代码> Value*/Cuth>大小相同。如果你通过了void*,就投到void*。修正了我的答案谢谢你的回答。现在我在
memcpy(size+buf,wstr,len)上没有什么问题
关于从
int
转换到
void*
函数需要一个
void*
,因此这就是我们必须传递的。它是常见的,但对于C++代码< int > <代码>和<>代码> Value*/Cuth>大小相同。如果你通过了void*,就投到void*。修正了我的答案谢谢你的回答。现在我在
memcpy(size+buf,wstr,len)上没有什么问题