标签: delete-operator

c ++ delete []是否适用于原始类型

在C++中,如果我有一个动态分配的基本类型数组,是否有必要使用delete []来防止内存泄漏?例如,

char * x = new char[100];
delete x; // is it required to call delete [] x?
struct A {
 ...
};
A *p = new A[30];
delete [] p; // delete p would cause memory leakage
Run Code Online (Sandbox Code Playgroud)

请评论.

c++ memory-leaks new-operator dynamic-memory-allocation delete-operator

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

在C++中删除新结构

我在C++代码中有错误的行为,似乎是由于动态创建的结构的错误释放造成的.结构形式如下:

typedef struct
{
    char *value;
} Element;

typedef struct
{
    int num;
    Element **elements;
    int *index;
} Container;
Run Code Online (Sandbox Code Playgroud)

它们是这样创建的:

Element *new_element(int size)
{
    Element *elem = new Element;
    elem->value = new char[size];
    return elem;
}

Container *new_container(int num)
{
    Container *cont = new Container;
    cont->num = num;
    cont->elements = new Element*[num];
    cont->index = new int[num];
}
Run Code Online (Sandbox Code Playgroud)

解冻这些的正确方法是什么?

c++ free struct memory-management delete-operator

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

无法使Delete工作在C++上

我试图用C++破坏对象,但我不能让它工作.我有几个关于如何在C++中清除内存的问题,由于GarbageCollector,我在Java中没有这么做.

我的Image类有以下析构函数和属性:

Class Image{
public:
Image(int w, int h){
    width = w; height = h;
    pixels = new int[w*h];
}
    ~Image() {
        delete [] pixels;
}
private:

        int *pixels; 
        int width, height;

}
Run Code Online (Sandbox Code Playgroud)

这是我正在用我的图像做的事情:

void keyboard(unsigned char key, int x, int y){
        Image* sub1 = new Image(1,1);
        Image* sub2 = new Image(1,1);
    if (key == 'd' && camadas[1].getpXf() < camadas[1].getImage().getWidth() - gameWidth/2) {

        sub1 = &camadas[0].ScrollH(true);
        sub2 = &camadas[1].ScrollH(true);
        sub1->plot(sub2->getPixels(), 0, 0, gameWidth, gameHeight);
        lastScreen = sub1->getPixels();
        glutPostRedisplay();
    }
    if …
Run Code Online (Sandbox Code Playgroud)

c++ destructor delete-operator

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

C++自定义删除操作符不能正常工作?

首先要说我是西班牙语,我的英语非常糟糕,我使用了一名翻译,因为我看起来像个文盲而道歉:)


我已经多年没有玩c ++而且我已经忘记了很多,以至于我可能怀疑或者可能的失败是语言中的基本内容.

我编写了一个小代码来测试c ++中带有虚拟析构函数的delete运算符的开销,我发现只有在第一次调用delete时它才能正常工作.

代码就在这里(这是一个允许你在线编写代码并执行代码的页面,我在visual studio和gcc中进行了测试,它完全相同):https://onlinegdb.com/SkiI1dNDQ

有人能告诉我为什么会这样吗?只有第一次运作良好,第二次运行不顺利

我也把代码放在这里,结果给出了:

#include <stdio.h>
class Base
{
public:
    virtual ~Base() { printf("~Base\r\n"); }
    void operator delete(void *m) { printf("delete Base\r\n"); }
};
class Derived : public Base
{
public:
    Derived() { x = 1; }
    ~Derived() { printf("~Derived\r\n"); }
    void operator delete(void *m) { printf("delete Derived\r\n"); }
    int x;
};

int main()
{
    Derived *derived = new Derived();
    printf("1) delete derived (%i)\r\n", ((Derived*)derived)->x);
    delete derived;
    printf("2) delete derived (%i)\r\n", ((Derived*)derived)->x); …
Run Code Online (Sandbox Code Playgroud)

c++ virtual delete-operator

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

删除 C++ 中的指针:“删除 p”是什么意思?

#include <iostream>
#include <cstdio>
using namespace std;

int main(void)
{
    int arr[] = {1,4,2,3,5,6};
    int *p = arr;
    delete p;

    for(int i = 0 ; i < 6; i++)
        cout << p[i];

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是142356。当我说delete p为什么不删除 p 时?

运行代码时不应该出现分段错误吗?

c++ pointers delete-operator

-3
推荐指数
1
解决办法
1970
查看次数

当我们在指向未使用new运算符分配的对象的指针上使用delete时会发生什么?

下面的代码编译正常,但不执行

#include <iostream>
using namespace std;

int main()
{
    int *a;
    int b = 5;
    a = &b;
    cout << *a << endl;
    delete a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

int main()
{
    int *a = 0;
    delete a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这很好用.为什么会这样?

c++ new-operator delete-operator

-3
推荐指数
1
解决办法
2474
查看次数

是否可以"删除"分配了"new [1]"的内存,反之亦然?

这段代码合法吗?

int * a = new int[1];
delete a;
Run Code Online (Sandbox Code Playgroud)

还是这一个?

int * a = new int;
delete [] a;
Run Code Online (Sandbox Code Playgroud)

显然,这似乎并不正确,至少应该劝阻,但它会导致任何实际问题(内存泄漏等等)吗?

c++ memory new-operator delete-operator c++11

-4
推荐指数
1
解决办法
152
查看次数

为什么可以在析构函数中删除未初始化的指针,但不能在main中删除?

请检查下面foo函数的析构函数.如果我删除p指针然后运行正常.但如果我在主程序中执行相同操作,那么我会收到错误.为什么它允许我在析构函数中执行此操作?

PS我知道删除指针没有意义,因为没有动态分配的内存.

class foo
{
  int* p;

public:
  ~foo()
  {
    delete p; // runs fine
    cout << "Destructor run \n";
  }
};


int main()
{

int* p;
delete p; // This will cause error "uninitialized local variable 'p' used "

foo test; // destructor runs fine at the end of the program

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers destructor delete-operator

-5
推荐指数
1
解决办法
128
查看次数

删除[] c ++不起作用

void show(int* x){
    printf("%d",x[3]);
}

int main(){
    int* ptr;

    ptr = new int[9]();
    delete [] ptr;    


    printf("%d %d\n", ptr[7], *(ptr+7));
    show(ptr);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ delete-operator

-8
推荐指数
1
解决办法
1119
查看次数

为什么这段代码片段包含错误?

我通常知道,*和&符号.但我们的老师给了我们一个例子,她说"问题发生在这里"

int *a1;
int *a2 = new int[100];
a1=a2 //What does this line mean???
delete []a2;

k=a1[0]//she said error occurs here.
Run Code Online (Sandbox Code Playgroud)

我无法理解什么是a1 = a2?为什么会出现错误?

c++ pointers assignment-operator delete-operator

-9
推荐指数
1
解决办法
82
查看次数