memcpy期间的ConnectThread错误

时间:2017-10-26 11:31:06

标签: c++ arrays visual-studio-2010 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));

1 个答案:

答案 0 :(得分:0)

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

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

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

'\0'