警告删除数组,在加载文件功能

Posted

技术标签:

【中文标题】警告删除数组,在加载文件功能【英文标题】:warning deleting array, in load file function 【发布时间】:2013-01-08 22:17:16 【问题描述】:

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

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

功能:

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;

【问题讨论】:

如果没有new,就没有delete 【参考方案1】:

您不能delete 自动分配的数组。删除delete [] chbuffer; 语句。

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

char *chbuffer = new char[fsize + 1];

在这种情况下,您想使用delete [] chbuffer

【讨论】:

哈哈谢谢你,我很累。到目前为止,它的工作情况如何?我们可以在没有“新”的情况下动态分配? @nomatchland 如果fsize 不是编译时常量,那么编译它的唯一方法是使用非标准扩展。 @nomatchland 语言的扩展。一些编译器的扩展违反了 c++ 标准规定的规则。 谢谢胡安,我现在明白了。规则不应该被打破。

以上是关于警告删除数组,在加载文件功能的主要内容,如果未能解决你的问题,请参考以下文章

Emacs警告加载“... / .emacs.el”时发生错误:

PHP 删除/修复模块未找到或已加载警告?

g++对删除一个数组的代码而不删除另一个数组的代码发出警告。

警告未加载vboxdrv内核模块

警告 Swift 后重新加载表

“加载项警告。此加载项的许可证信息丢失或已过期,因此它的功能可能有限”