我有一个问题。
我在 ASIO 中开发服务器,数据包是尖字符。
当我创建新字符(例如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;
然后在设置之前读取或使用此值是未定义的行为。
要 zeroinitialise(将设置为 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
-loop 或使用memset
手动清除它。