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)上没有什么问题在C++中不推荐使用VARARGS。当你用C++编程时,你应该放弃C的知识。你应该习惯在问题中张贴S,而不仅仅是不完整的代码片段。使用MalCube()使用FAREL(),在C++中不推荐VARARGS。当你用C++编程时,你应该扔掉关于C的知识。你应该习惯在问题中张贴S,而不仅仅是不完整的代码片段。