C/C++

C++ Чтение недопустимых данных из sArray

 class stringArray 
{
private:
string* sArray = new string[0];
unsigned aSize = 0;
void update(unsigned size)
{
string* oldArray = sArray;
sArray = new string[size];
for (unsigned i = 0; i < aSize; i++) sArray[i] = oldArray[i]; // ошибка тут
delete[] oldArray;
}
public:
~stringArray()
{
delete[] sArray;
}
string get(unsigned id)
{
return sArray[id];
}
void set(unsigned id, string str)
{
if (id + 1 > aSize) update(id + 1);
sArray[id] = str;
}
};
Так как у вас в методе update появляется два массива, а переменная для копирования i одна - он (IntelliSense) не может определить не больше ли aSize чем size, и на всякий случай выдает предупреждение.
 void update(unsigned size) 
{
string* oldArray = sArray;
sArray = new string[size]{};
if (aSize
Сергей Чернега
Сергей Чернега
51 416
Лучший ответ
И как угадать что там происходит в функции main() ? Может get() вызывается с индексом выходящим за пределы ( а в функции нет проверки )

PS: В функции update "размер" не обновляется
Некоторые примеры недопустимых данных, которые могут быть считаны из массива в C++, включают:

1. Чтение за пределы конца массива
2. Чтение неинициализированных элементов массива
3. Чтение из массива, который не был выделен должным образом

Чтобы убедиться, что вы правильно инициализируете свои массивы и остаетесь в пределах массива при чтении из него, вы можете воспользоваться следующими рекомендациями:

1. Всегда инициализируйте свои массивы действительными данными перед их использованием.
2. Используйте цикл для перебора элементов массива и убедитесь, что вы обращаетесь только к элементам в пределах массива.
3. Используйте метод size() класса stringArray, чтобы получить количество элементов в массиве, и используйте это значение, чтобы убедиться, что вы не читаете дальше конца массива.

Вот пример того, как вы можете инициализировать stringArray и безопасно читать из него:
 stringArray myArray(5); // create an array of size 5 
for (int i = 0; i < myArray.size(); i++) {
myArray[i] = "Hello"; // initialize each element with valid data
}
for (int i = 0; i < myArray.size(); i++) {
cout
Олег Домуз
Олег Домуз
2 055