我在将文件加载到内存时遇到了麻烦,我的编译器警告我一些我没有掌握的东西.怎么了?
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) 直到那时我曾经应对,在这里我正在尝试使用矢量构建我自己的容器类.我的工作需要它.我正在使用代码块10.05
class myclass
{
public :
vector<myclass> array;
char * classname;
...
Run Code Online (Sandbox Code Playgroud)
问题是,如果在析构函数中没有删除我的类,我的类的数据会很好地显示在屏幕上.如果删除classname,我的函数show()会显示奇数个字符.我认为它来自我的构建对象的方法和范围问题,当我将它们作为参数传递时.
myclass::~myclass()
{
//if(classname) delete [] classname;
}
Run Code Online (Sandbox Code Playgroud)
这是它在构造函数中初始化的方式:
myclass::myclass(long lvl = 0, const char name[] = "undefined")
:ID(++ ID_counter)
{
level = lvl;
int namelength = strlen(name);
classname = new char[namelength + 1];
strcpy(classname, name);
}
Run Code Online (Sandbox Code Playgroud)
add_content(const myclass&c)应该在这个 - >数组中复制c.array的元素和"push_back"它们我发现我们可以放置一个没有名字的对象作为参数:mycontainer.add_content (MyClass的(3,5)); 它有效,但我对其应有的范围持怀疑态度
> int main()
> {
> myclass mycontainer(0);
> mycontainer.add_content(myclass(3,5));
> ...
Run Code Online (Sandbox Code Playgroud)
这是完整的代码:
#include …Run Code Online (Sandbox Code Playgroud)