Следующая программа создает новый массив структур из [n+5]
элементов, каждый раз, когда количество достигает 5
, 10
, 15
, ... и копирует старые элементы в новый массив.
Это ошибка, выданная:
Исключение, выданное в 0x7AE740DF (vcruntime140d.dll) в ConsoleApplication4.exe: 0xC0000005: Место записи нарушения прав доступа 0x6CBFEBB8.
Ошибка выводится в строке 69, где написано items += 1;
#include <iostream>
#include <iomanip>
using namespace std;
struct item{
string name;
int eff;
};
item* ptr = nullptr;
item* temp = nullptr;
int itemsA = 0;
int arrSize = 5;
int lastElement = 0;
void func(int&, item *& ,int&, int& , item*&);
int main()
{
ptr = new item[arrSize];
func(arrSize, ptr,itemsA,lastElement, temp);
}
void func(int& arrSize, item *& ptr, int &items, int&lastElement, item *& temp)
{
bool event = false;
int a = 1;
while (a == 1)
{
cout << "Your array size is: " << arrSize << endl;
if (items > arrSize)
{
temp = new item[arrSize];
for (int x = 0; x < arrSize; x++)
{
temp[x].eff = ptr[x].eff;
temp[x].name = ptr[x].name;
}
arrSize += 5;
delete[] ptr;
ptr = nullptr;
ptr = new item[arrSize];
for (int x = 0; x < arrSize; x++)
{
ptr[x].name = temp[x].name;
ptr[x].eff = temp[x].eff;
}
delete[] temp;
temp = nullptr;
}
int any;
string any2;
cout << "ENter name for position number: " << lastElement + 1 << "\n";
cin >> any2;
cout << "ENter int for hp effect for position number: " << lastElement + 1 << "\n";
cin >> any;
ptr[lastElement].eff = any;
ptr[lastElement].name = any2;
items +=1; //////////the error is thrown here
cout << "You now have " << items << " items.\n";
cout << "Items in your bag: \n";
for (int x = 0; x < items; x++)
{
cout << ptr[x].name << " which gives you extra " << ptr[x].eff << " health when used.\n";
}
lastElement += 1;
}
}