小编nom*_*and的帖子

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

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

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)

c++ crash warnings

6
推荐指数
1
解决办法
6433
查看次数

如果使用向量删除一个重叠的自有容器的析构函数中的char*成员,则会崩溃

直到那时我曾经应对,在这里我正在尝试使用矢量构建我自己的容器类.我的工作需要它.我正在使用代码块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)

c++ string vector dereference

2
推荐指数
1
解决办法
443
查看次数

标签 统计

c++ ×2

crash ×1

dereference ×1

string ×1

vector ×1

warnings ×1