char* sentence = new char();
cout<<"Enter "<<i+1<<" sentence: ";
cin.getline(sentence,50);
Это выделяет место только для одного char
, но вы пытаетесь записать до 50 char
с в эту память. Доступ к памяти, которой вы не владеете, приводит к тому, что поведение вашей программы не определено.
for(int j=0; j<br; j++)
{
array[i][j] = sentence[j];
}
При попытке скопировать первые br
символов из sentence
в array[i]
, но array
заполнен неинициализированных указателей. Разыменование неинициализированного указателя приводит к неопределенному поведению, а затем попытка записи в память, на которую он «указывает», является более неопределенным поведением.
delete[] array;
В конце вашей программы вы пытаетесь освободить память, выделенную для array
, но вы не распределили эту память через new
. Еще раз, неопределенное поведение. array
имеет автоматическое c время хранения, поэтому его память будет автоматически освобождена, когда он выйдет из области видимости; вы не должны пытаться освободить его с помощью delete
.
Вместо сочетания стати c массивов и динамического c управления памятью, вы должны использовать std::vector<std::string>
. Это сделает все управление памятью за вас:
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::cout << "Enter the number of sentences: ";
int n;
std::cin >> n;
std::cin.ignore();
std::vector<std::string> array(n);
for (int i = 0; i < n; i++) {
std::cout << "Enter " << i + 1 << " sentence: ";
std::getline(std::cin, array[i]);
}
for (int i = 0; i < n; i++) {
std::cout << array[i] << std::endl;
}
}