C++新的 * 字符不为空

C++ new * char aren't empty

本文关键字:字符 新的 C++      更新时间:2023-10-16

我有一个问题。

我在ASIO中开发服务器,数据包是指向char。

当我创建新字符(例如char * buffer = new char[128];)时,我必须手动将其清除为空。

由:

for(int i =0;i<128;i++)
{
buffer[i] = 0x00;
}

我做错了什么,那个字符不清楚吗?

不必遍历未初始化值的数组。你可以像这样动态实例化一个零数组:

char * buffer = new char[128](); // all elements set to 0
                             ^^

在c++中调用new操作符有两种方式——默认初始化和零初始化。

要默认初始化(这将使值未定义),调用:

int * i = new int;

在该值被设置之前,读取或使用该值是未定义的行为。

要将初始化为零(将设置为0),使用:

int * i = new int();

也适用于数组:

int * i = new int[4]; // ints are not initialised, you must write to them before reading them
int * i = new int[4](); // ints all zero initialised

这里有更多的信息

分配的内存将不清楚,它将包含随机的东西。这就是内存分配的工作原理。您必须运行for -循环或使用memset手动清除它。

您也可以使用calloc。它自动将每个元素初始化为0。例句:

 char* buffer = (char *) calloc (128, sizeof (char))

第一个参数是要分配的块的数量。其次是块的大小。这个函数返回void*,所以你必须将它的值转换为(char *)如果您使用calloc(或malloc或任何"纯c"分配函数),您最好使用free函数来释放内存,而不是delete。