delete-operator

    1热度

    1回答

    我非常肯定它是,但如果我正确地解释标准(第18.6.1.2 new.delete.array)提到: 无效的operator delete [](void *的PTR)noexcept; 指针。 。 13默认行为:调用delete操作符(PTR) 由于其默认行为删除[]只是调用其删除(PTR),相当于它为什么要不管哪个版本被称为? 我一个示例代码试图验证这一点,它崩溃使它更明显的是不匹配的新的[]

    4热度

    2回答

    我已阅读here以及其他地方,删除同一变量两次可能是灾难性的(即使有多个变量名称)。 假设我有一个函数,它接受一个输入和输出数组: void test(int*& input, int*& output) { if(input[0] == 0) { output = input; } } 并且它可以分配一个指针到另一个可变我使用: int *input = ne

    0热度

    2回答

    我一直在我的spaceInvaders克隆工作,我现在试图清理内存泄漏完成项目。 当前我试图删除在构造函数中创建的11 aliensobjects的数组,但是这样做时程序会在AlienRow的析构函数处中断(崩溃)。 我已经试过了以下几件事: 创建nullpointers在构造函数,并删除了与此: for (int i = 0; i < 11; i++) { if (alie

    1热度

    1回答

    我有一个回调传递给一个异步函数,它只负责删除传递给异步函数的指针。 如何删除指针: 通过使用显式删除。 通过创建将删除对象的unique_ptr。 对于创建对象也有同样的问题 - 我应该使用new还是创建一个unique_ptr并立即释放它。 MyClass* myClass = make_unique<MyClass>().release(); AsyncFunc(myClass, [myCl

    0热度

    2回答

    我有一个2d的对象指针数组,我试图为一个对象删除两个数组中的指针,然后删除数组本身。我限定在对象的头阵列被析构像这样 space* board[6][6]; 我分配空间物体的阵列中,像这样: board[0][0]= new space(1,0); board[0][1] = new space(1, 0); board[0][2] = new space(1, 0);

    1热度

    3回答

    为什么这段代码错了?我是否错过了delete和delete[]的行为? void remove_stopwords(char** strings, int* length) { char** strings_new = new char*[*length]; int length_new = 0; for(int i=0; i<*length; i++) {

    1热度

    1回答

    我试图在Visual C++中使用内联ASM调用operator new和operator delete。 例如,我有这样的功能: __forceinline void __fastcall deallocate(pointer& _ptr) { __asm { mov eax, dword ptr[_ptr] mov ecx, dword ptr[e

    0热度

    3回答

    标题可能会令人困惑。这是一件简单的事情,但我已经搜索并尝试了一个小时。我已经尝试了我发现的一切。 代码: void test() { // Convert wchar_t* wcBuff; wstring value = convert::stringToWideChar(str); wcBuff = (wchar_t*)value.c_str(); // Draw Text g

    0热度

    2回答

    Carray.h #ifndef CARRAY_H #define CARRAY_H #include "Cell.h" #include "Pirate.h" class CArray { public: CArray(); ~CArray(); int getSize(); Cell* get(int); int add

    1热度

    1回答

    这里修改后的代码是 int *p = new int[10]; ... delete[] p; 程序如何知道有多少元素在那里当删除[]被称为? 假设我们插入之间以下代码: p++; 会将程序试图释放一个多元素?它会停在第10个元素吗?