1

メモリ割り当てエラーを理解するのに助けが必要です。私はこのエラーを受け取り続けます:

エラー:メモリを割り当てることができませんでした。

...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++を初めて使用します)。

4

1 に答える 1

1

おそらく何らかの理由で眉をひそめていますが、代わりに試してみたいと思いますstrdup

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

と対になる

free(fName);
于 2013-02-21T16:01:33.360 に答える