memcpy 期间出现 ConnectThread 错误

ConnectThread error during memcpy

我正在使用 2 个字符数组(其中一个被声明为静态)

static char st_arr[8192];
char arr[162];
int itr = 0;

arr 正在 foo() 方法中实例化,其中填充了 162(或更少)字节的数据。正在使用 memcpy()

将此数据复制到 st_arr
void foo() {
   for(int i=0; i<some_len; i++) { //some_len < 162
       arr[i] = some_obj->data[i];
   }
   memcpy(&st_arr[itr], arr, some_len);
   itr += some_len;
}

这里 foo() 被递归调用,目的是用我们在每次 foo() 调用中从 arr 获得的完整数据填充 st_arr。

这有效,但我经常得到以下信息:

beginThreadex Connect Thread error [%d][%s]

在 st_arr 的末尾。 这个错误的原因可能是什么。 我正在使用 memcpy:

在程序结束时清除 st_arr
memcpy(&st_arr[0], "", sizeof(st_arr));

memcpy(&st_arr[0], "", sizeof(st_arr)); 是未定义的行为。

您正在尝试从 "" 复制 sizeof(st_arr) 字节(根据您的示例为 8192)内存,其中只有 1 个字节可用,因为空字符串仅包含空终止符('[= 14=]'),所以你正在读取为这样一个空字符串分配的内存末尾。

要将内存清零,请考虑使用 std::memset:

std::memset (&st_arr[0], 0, sizeof(st_arr));