警告删除数组,在加载文件功能
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”时发生错误: