将字符串转换为字符*时出现内存分配错误

memory allocation error while converting string to char*

本文关键字:内存 分配 错误 字符串 转换 字符      更新时间:2023-10-16

我需要一些帮助来确定内存分配错误。我不断收到此错误:

错误:无法分配内存。

。当以下代码中的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++新手(。

它可能出于某种原因而皱眉,但我倾向于尝试strdup

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

搭配

free(fName);