Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deleting in C++

Tags:

c++

struct item   
{ 
  unsigned int a, b, c;
};

item* items[10];    
delete items[5];    
items[5] = NULL;

The above code works

But the below method is not working

int * arr1[30];

delete (arr1+5);

I am a beginner, Please tell me why I am able to delete in case of structure pointer but not in case of int pointer

like image 755
Kunal Avatar asked Nov 26 '25 12:11

Kunal


2 Answers

You're seemingly misunderstanding what delete is for: it's purely and simply to release memory allocated by new, not to 'delete' elements of arrays.

So you might use it like this:

int *p = new int;
//...
delete p;

When you allocate arrays, you must instead use delete[], like this:

int *q = new int[23];
//...
delete [] q;

But at no point should you try and delete something that hasn't been new'ed, or use the non-matching version of delete, e.g. delete [] p; or delete q; above.

If what you really want is some sort of 'array' from which you can remove elements, try this:

#include <vector>

struct item
{
    unsigned int a, b, c;
};

int main()
{
    std::vector<item> items(10);
    items[5].a = 23;
    items.erase(items.begin() + 5);
    return 0;
}
like image 121
Stuart Golodetz Avatar answered Nov 28 '25 03:11

Stuart Golodetz


Are you allocating heap memory anywhere? You are not doing so in the code above. You are lucky that the first delete does not crash.

like image 36
Jim Buck Avatar answered Nov 28 '25 01:11

Jim Buck



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!