事件起因为我开了很多线程,然后 对一个httpServer发送一些string的命令,最多大概发送个千把次,但是服务器有时候接受的string 会莫名奇妙的多一些字符串在末尾。
CSafeArrayVector<unsigned char>& varTmpData =(CSafeArrayVector<unsigned char>&)varData;// variant转variant 数组封装
unsigned char*p = NULL;
int count = varTmpData.size();
p = new unsigned char[count]; //这里new的内容可能是上次已经存在的内容
memset(p, 0,count);
memcpy(p,varTmpData.begin(), count);// 虽然内存置0了,也是memcpy count字节, 但是 频繁的调用 这里 p 的内容会比你count多一部分数据,这里可能跟对齐有关系,现象就是我 new 是78个字节 memcpy也是78 但是这里p做完memcpy后 p[79] ,p[80]这个位子竟然还有值。而且不是 空值。
delete p;
换了一种思路,线程内不频繁开辟内存,虽然当前机器内存很够用:
做一个简单的内存管理,整个子线程开始先new一次内存,假如需要更多内存再多开辟一点,假如不需要更多内存,则每次使用这一块,只不过memcpy的时候只copy前面你需要的字节长度。