我正在使用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));
答案 0 :(得分:0)
memcpy(&st_arr[0], "", sizeof(st_arr));
是未定义的行为。
您正尝试从sizeof(st_arr)
复制""
个字节(基于您的示例为8192)内存,其中只有1个字节可用,因为空字符串仅包含空终止符({{1} }),所以你正在读取为这样一个空字符串分配的内存的结尾。
要将内存清零,请考虑使用std::memset
:
'\0'