+ 6
In dynamic memory allocation for arrays, can we delete the memory of pointers only for specific parts of the array?
for freeing memory we use delete [ ] p; but that is used for freeing up the whole array. can we do so only for specific position in the array like P[20]
11 odpowiedzi
+ 4
Ketan Lalcheta
&a[0] == (a + 0) == a == base address
&a[1] == (a + 1) == base address + 1
...
That proves one important fact. The delete[] does not know the size of the allocated block precisely on the heap while deleting, You might think "Well, I told the new[] to spare 100 elements when I used "new int[100]" ." That's true. But according to the standard (n4292)§3.7.4.1 p.67
" The allocation function attempts to allocate the requested amount of storage. If it is successful, it shall return the [address of the start of a block of storage] whose length in bytes shall be [at least as large as the requested size]. There are no constraints on the contents of the allocated storage on return from the allocation function. [...]"
+ 3
Sushank Mishra I don't think so...array is contiguous memory allocation... I have never tried this.eager to see other responses
+ 2
just now checked...
int* a = new int [50];
delete &a[0];// works fine..
delete &a[1]; // invalid pointer...error at run time.. aborted (core dump)
seems you cannot access the other element for delete except zeroth one
+ 2
Ace I thought the same..this might delete entire array because in general also, array name itself point to array's first element..
+ 2
Ketan Lalcheta
The error you've got!
+ 2
Ketan Lalcheta
Since the context is about interaction between new[] and delete[] functions let me wrap up my response by this easy to answer question: Why the language doesn't allow something like "delete[100] a", instead?
Now, that we know how the block of the dynamically allocated memory be treated, and its size can be more than the initial allocated size, the answer becomes obvious. Because, delete[] begins to do its housekeeping process from the base address of the array to where the allocator has been defined. it might be 100 or 101 or a greater number.
+ 1
I fear that this might create a segmentation fault or something but at the same time I know that I have no knowledge of C++!!!😂😂
+ 1
C++ Soldier (Babak) What you want to convey? I know this what you said..but can't co relate with this question
+ 1
C++ Soldier (Babak) yup.. I missed to link with my error...
agree but I would like to differ on this.. array size is known as soon as we try to access it where it was defined... it is not proper once we try to get it somewhere else...
refer below code :
https://code.sololearn.com/cTKDK147biD4/?ref=app
correct me if I have misinterpreted something..
0
thanks people
0
In C/C++, we can store objects or pointers to objects in an array. If we store objects in it, then we cannot free an object at a specific index. If we use array to store pointers to objects then we surely can free the objects pointed by the pointers at some positions if we want to. It is like to delete a pointer.
delete array[i];