警告删除数组,在加载文件函数中

nom*_*and 6 c++ crash warnings

我在将文件加载到内存时遇到了麻烦,我的编译器警告我一些我没有掌握的东西.怎么了?

C:\Users\Caroline\Desktop\Prog\literature.cpp:236:15: warning: deleting array 'char chbuffer [(((sizetype)((ssizetype)fsize)) + 1)]' [enabled by default]
Run Code Online (Sandbox Code Playgroud)

功能:

bool loadfile(string & buffer, const char fpath[])
{
    ifstream file(fpath, ios::binary);
    if(!file) return false;
    file.seekg(0, ios::end);
    long fsize = file.tellg();
    file.clear();
    file.seekg(0);
    char chbuffer[fsize + 1];
    file.read(chbuffer, fsize);
    buffer = chbuffer;
    delete [] chbuffer;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 11

你不能delete自动分配数组.删除delete [] chbuffer;声明.

一般情况下,delete仅在配对时使用new.你可以chbuffer像这样分配:

char *chbuffer = new char[fsize + 1];
Run Code Online (Sandbox Code Playgroud)

在这种情况下你想要使用delete [] chbuffer.

  • @nomatchland如果``fsize``不是编译时常量,那么它编译的唯一方法是使用非标准扩展. (2认同)
  • @nomatchland是该语言的扩展.有些编译器的扩展会破坏c ++标准规定的规则. (2认同)