我需要一些帮助来找出内存分配错误。我一直收到这个错误:
错误:无法分配内存。
...以下代码中fList
较大时:
for (unsigned int ii=0; ii<fList.size(); ii++) {
char *fName = new char[fList[ii].length() + 1];
strcpy(fName, fList[ii].c_str());
err = xInitFile(fName, ii+1);
if(err != 0) {
cout << "FOOBAR" << endl;
}
delete[] fName;
}
fList
是std::vector<std::string>
。
函数xInitFile
是一个C共享库函数,具有以下原型:
int xInitFile(char *fName, int fHandle)
如果fList
很小,那么一切都运行良好。我很确定问题在于我如何将字符串转换为char *
,但我无法弄清楚如何修复它。据我所知,fName
总是被删除,所以它似乎不是内存泄漏。运行代码时,我的内存使用率也没有高峰。
编辑:
评论err = xInitFile(fName, ii+1);
可以消除错误。这意味着分配错误发生在xInitFile
,对吗?我之前没有想过尝试这个,因为我认为问题出在我的代码中(b / c我是C ++的新手)。
答案 0 :(得分:1)
出于这样或那样的原因,它可能不赞成,但我倾向于尝试strdup
。
char *fName = strdup( fList[ii].c_str() );
与
配对free(fName);