将字符串转换为char *时的内存分配错误

时间:2013-02-21 15:54:55

标签: c++ memory

我需要一些帮助来找出内存分配错误。我一直收到这个错误:

  

错误:无法分配内存。

...以下代码中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;
}

fListstd::vector<std::string>

函数xInitFile是一个C共享库函数,具有以下原型:

int xInitFile(char *fName, int fHandle)

如果fList很小,那么一切都运行良好。我很确定问题在于我如何将字符串转换为char *,但我无法弄清楚如何修复它。据我所知,fName总是被删除,所以它似乎不是内存泄漏。运行代码时,我的内存使用率也没有高峰。

编辑:

评论err = xInitFile(fName, ii+1);可以消除错误。这意味着分配错误发生在xInitFile,对吗?我之前没有想过尝试这个,因为我认为问题出在我的代码中(b / c我是C ++的新手)。

1 个答案:

答案 0 :(得分:1)

出于这样或那样的原因,它可能不赞成,但我倾向于尝试strdup

char *fName = strdup( fList[ii].c_str() );

配对
free(fName);