/ / Изтриване на динамичен знак ** в C ++ - c ++, масиви, динамични, char

Изтриване на динамичен знак ** в C ++ - c ++, масиви, динамичен, char

Разкриване на информация Обикновено бих използвал вектори и струни, но тук имам нужда от най-бързото и най-малкото решение (с векторите, които всъщност надхвърлиха срока), така че се обърнах към динамични масиви от char *. Съответните части от моя код:

char** substrings(string s, int* n){
*n = 0;
...
////////////////////////////////
char** strings = new char*[*n];
////////////////////////////////
for (int i = 0; i < s.length(); i++){
for (int j = 1; j < s.length() - i + 1; j++){
...
strings[si] = tmp;
...
}
}
return strings;
}

int main(){
...
for (int ti = 0; ti < t; ti++){
cin >> s;
char** substr = substrings(s, &n);
...

for (int i = 0; i < n; i++){
delete substr[i];
}
}
return 0;
}

Всичко върви добре без да изтриете масива (масиви), но това е неприемливо, така че как да направя това? Опитах много варианти, които изглеждаха логични, но имам грешки по време на работа.

Отговори:

7 за отговор № 1

Подобно е разпределението, но в обратен ред и използване delete[] вместо new[]:

for(int i = 0; i <  LENGTH; i++)
delete[] strings[i]; // delete each pointer in char** strings
delete[] strings; // finally delete the array of pointers

Предположих, че това е така LENGTH е дължината на масива от указатели към char*, Така че изглежда, че изпълнявате само първия кръг от преразпределение

for (int i = 0; i < n; i++){
delete substr[i]; // need delete[] substr[i] here

но със delete вместо delete[], ти трябва delete[] substr[i] вместо това, тъй като моето предположение е, че substr[i] е char* показалец, посочващ първия елемент от масива charразпределени от new[], Най-накрая се нуждаете от допълнителните

delete[] substr;