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;
}
};
C/C++
C++ Чтение недопустимых данных из sArray
Так как у вас в методе update появляется два массива, а переменная для копирования i одна - он (IntelliSense) не может определить не больше ли aSize чем size, и на всякий случай выдает предупреждение.
void update(unsigned size)
{
string* oldArray = sArray;
sArray = new string[size]{};
if (aSize
И как угадать что там происходит в функции main() ? Может get() вызывается с индексом выходящим за пределы ( а в функции нет проверки )
PS: В функции update "размер" не обновляется
PS: В функции update "размер" не обновляется
Некоторые примеры недопустимых данных, которые могут быть считаны из массива в C++, включают:
1. Чтение за пределы конца массива
2. Чтение неинициализированных элементов массива
3. Чтение из массива, который не был выделен должным образом
Чтобы убедиться, что вы правильно инициализируете свои массивы и остаетесь в пределах массива при чтении из него, вы можете воспользоваться следующими рекомендациями:
1. Всегда инициализируйте свои массивы действительными данными перед их использованием.
2. Используйте цикл для перебора элементов массива и убедитесь, что вы обращаетесь только к элементам в пределах массива.
3. Используйте метод size() класса stringArray, чтобы получить количество элементов в массиве, и используйте это значение, чтобы убедиться, что вы не читаете дальше конца массива.
Вот пример того, как вы можете инициализировать stringArray и безопасно читать из него:
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
Похожие вопросы
- Как записать данные в бинарный файл C++
- Задача по C++, анализ данных в двумерном массиве
- Необходимо вычислить аппроксимацию данных квадратичной функцией f(x)=at2+bt+c.Вычислить коэффициенты a,b и c
- Бинарные данные C++. Как быстрее?
- Какие из этих книг вы посоветуете прочесть в первую очередь чтобы повысить свои знания в C/C++?
- Задача по C++
- День добрый \[-_-]/ вопрос по вузовскому программированию на си(C)
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Почему создатель Linux Линус Торвальдс называет C++ ужасным языком, а ядро ОС Linux пишется только на Си?
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха