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));
我正在使用 2 个字符数组(其中一个被声明为静态)
static char st_arr[8192];
char arr[162];
int itr = 0;
arr 正在 foo() 方法中实例化,其中填充了 162(或更少)字节的数据。正在使用 memcpy()
将此数据复制到 st_arrvoid 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_arrmemcpy(&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));