Reputation: 61
I have a problem with 2D dynamic array. Code is here:
//Inicialization
char** arr = new char* [size];
for(int i = 0; i < size; i++)
arr[i] = new char[70];
It is basicly number of sentences with max 70 chars each. Ok... I used it before in that way. Then I want to delocate it - I did it too!
//Deleting
for(int i = 0; i < size; i++)
delete [] arr[i];
delete [] arr;
And this will crash right at i = 0 with: "Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)".
But as I said - I used it in different project in this way:
//Init
char** vety = new char* [pocVet];
for(int i = 0; i < pocVet; i++)
vety[i] = new char[100];
//Something (again a few sentences).
//Deleting
for(int i = 0; i < pocVet; i++)
delete [] vety[i];
delete [] vety;
I looked everywhere in here and it is the same. What is wrong? PS: In the second example where it works don't mind different names (in my mother language).
Edit: Maybe it is because of the content of the array? But in the second case (where it works) are the sentences in it either. I just have a bunch of questions in it and user only choose the action - so basicly it is just sentences:
arr[0] = " 1 - Use something\n";
arr[1] = " 2 - Use different thing\n";
arr[2] = " 3 - etc...\n";
arr[3] = " 4 - etc\n";
arr[4] = " 5 - etc\n";
arr[5] = " 6 - etc\n";
arr[6] = " 7 - etc\n";
I do nothing with it... only printf();
Upvotes: 0
Views: 100
Reputation: 654
sprintf
should work for you as long as string literal is of size less than 70.
sprintf(arr[0], " 1 - Use something\n");
Upvotes: 1
Reputation: 170055
You reassign the pointer arr[0]
to point to a string literal.
arr[0] = " 1 - Use something\n";
So you leak the memory you allocated and then you try to call delete[]
on memory you didn't allocate.
The solution is to not mess with raw pointers yourself, and instead use the standard library to do the difficult work for you.
std::vector<std::string> v;
v.emplace_back(" 1 - Use something\n");
// Other sentences
Upvotes: 4