Я новичок в использовании операторов удаления, и меня немного смущает, почему моя программа продолжает падать, когда я пытаюсь удалить элемент из массива указателей.Сбой при обоих удалениях, я закомментировал другой цикл for для проверки этого.
int main()
{
char ** str_array = nullptr;
char * str = nullptr;
char delimiter = ' ';
int arraySize = 0;
str = new char [51];
cout << "Enter a string" << endl;
cin.clear();
cin.ignore( cin.rdbuf() -> in_avail() );
cin.getline(str, 50);
cin.clear();
arraySize = StrToArray(str_array, str, delimiter);
for (int i = 0; i < arraySize; i++)
{
cout << str_array[i] << endl;
}
for (int i = 0; i < arraySize; ++i)
{
delete [] str_array[i];
}
delete [] str_array;
return 0;
}
Вот функция, которую я использую для инициализации str_array.
int StrToArray(char **& str_array, char * str, char delimiter)
{
int size = 0;
int arraySize = 0;
int start = 0;
for (int i = 0; i < strlen(str); i++)
{
if (str[i] == ' ')
{
size++;
if (str[i + 1] == '\0' || str[i + 1] == ' ')
{
size--;
}
}
}
str_array = new char * [size];
for (int i = 0; i < strlen(str) + 1; i++)
{
if ((str[i] == ' ' || str[i] == '\0') && !(str[i + 1] == '\0' || str[i + 1] == ' '))
{
str_array[arraySize] = new char[i-start];
arraySize++;
for (int x = 0; x <= i - start; x++)
{
str_array[arraySize-1][x] = str[x + start];
if (x == i-start)
{
str_array[arraySize - 1][x] = '\0';
}
}
i++;
start = i;
}
}
return (size + 1);
}
My str_array
инициализируется как массив указателей, и каждый указатель указывает на cString.То, что я пытаюсь сделать, это удалить каждый элемент массива, а затем удалить сам массив.Однако каждый раз, когда я пытаюсь выполнить любой из операторов delete, мой код вылетает.