我的for循环中的memcpy有问题 - 我需要将字符串转换为* char:
for(i=0;i<10000;i++){
char* Bchar = new char[Bi[i].length()+1];
ZeroMemory(Bchar,Bi[i].length());
memcpy(Bchar, Bi[i].c_str(), Bi[i].length()); //Exception on this row
...
delete [] Bchar;
}
的链接
答案 0 :(得分:1)
看起来你不是将字符串零终止到新创建的Bchar
缓冲区中。根据您在复制到Bchar
缓冲区后对缓冲区执行的操作,您很可能会访问缓冲区的末尾。
而不是ZeroMemory / memcpy,只需使用strcpy(或strcpy_s)。
答案 1 :(得分:1)
此代码:
char* Bchar = new char[Bi[i].length()+1];
ZeroMemory(Bchar,Bi[i].length());
不会将最后一个字节归零。并且您不会在随后的memcpy
中复制该字节。
而不是ZeroMemory
只使用标准C ++,
char* Bchar = new char[ Bi[i].length()+1 ]();
然而,虽然这解决了问题,但为什么不使用std::vector
并让 it 管理内存?
string const& s = Bi[i];
vector<char> Bchar( s.begin(), s.end() );
作为一般规则,直接使用new
和delete
作为一种气味的气味。