相关疑难解决方法(0)

结构数组和新/删除

我有这样的结构:

class Items 
{
private:
    struct item
    {
        unsigned int a, b, c;
    };
    item* items[MAX_ITEMS];
}
Run Code Online (Sandbox Code Playgroud)

假设我想'删除'一个项目,如下所示:

items[5] = NULL;
Run Code Online (Sandbox Code Playgroud)

我后来在同一个地方创建了一个新项目:

items[5] = new item;
Run Code Online (Sandbox Code Playgroud)

我还需要打电话delete[]来清理它吗?或者不需要这样,因为items[]在编译之前已知数组的边界?

将该指针设置为NULL有效还是应该在那里调用delete?

c++ arrays struct memory-management new-operator

7
推荐指数
2
解决办法
2万
查看次数

非法删除堆栈对象

int main()
{
    myClass obj;

    ....    /* doing things */
    ....

    delete &obj; /* illegal */
}
Run Code Online (Sandbox Code Playgroud)

让我们假设myClass是一个适当的C++类,其中包含所有内容.现在,我知道这是非法的,这个程序会在运行时崩溃.第一件事就是代码试图删除一个堆栈对象,然后在范围完成之后它再次被破坏.我想知道这种非法行动的内部情况.即删除会发生什么,它会调用析构函数吗?对你来说可能看起来很疯狂,但请帮助我理解.

c++

0
推荐指数
1
解决办法
139
查看次数

为什么我不能删除以下指针?

int main()
{
    int x = 3;
    int* y = new int(4);
    y = &x;
    cout << y;
    delete y;
}
Run Code Online (Sandbox Code Playgroud)

它显示以下错误:

'./a.out'中的错误:free():无效的指针:0x00007ffde8e1c0364

0x7ffde8e1c0364已中止

c++

-4
推荐指数
2
解决办法
125
查看次数

标签 统计

c++ ×3

arrays ×1

memory-management ×1

new-operator ×1

struct ×1