Я делал код, в котором я должен создать динамический массив c и указатель (указатель должен использоваться для перемещения по данным массива). Я должен сделать методы get (чтобы вернуть индекс числа для поиска в массиве), update (когда метод get возвращает индекс, метод update может обновить значение), length (этот метод должен возвращать размер массива ), next (этот метод должен перемещать указатель на следующий индекс массива), start (этот метод должен перемещать указатель на начало массива), end (этот метод должен перемещать указатель на конец массива) и Add (он должен добавить блок в массив)
Вот код
#include <iostream>
#include <conio.h>
using namespace std;
class Runner
{
private:
int *arr;
int *ptr;
int size;
// to input in array
void Input()
{
for (int i = 0; i < size; i++,*ptr++)
{
cout << "Enter value no. " << i + 1 << "\t";
cin >> arr[i];
}
}
//to allocate memory
void Create()
{
cout << "Enter the total number of elements :\t";
cin >> size;
arr = new int[size];
ptr = arr;
Input();
}
public:
//constructor to define starting value
Runner()
{
ptr = NULL;
size = 0;
arr = NULL;
}
//get function
int get(int num)
{
bool NotNull = false;
int index = 0;
do
{
if (ptr != NULL)
{
ptr = &arr[0];
for (int i = 0; i < size; i++,*(ptr++))
{
if (num == *ptr)
{
index = i;
break;
}
}
NotNull = true;
}
else
{
Create();
}
} while (!NotNull);
return index;
}
//update function
void Update(int num)
{
int val;
int index = get(num);
cout << "Enter value to update :\t";
cin >> val;
ptr = ptr + index;
*ptr = val;
}
//length function
int length()
{
if (ptr == NULL)
{
Create();
}
return size;
}
//moving pointer back
void Back()
{
bool NotNull = false;
do
{
if (ptr != NULL)
{
*(ptr--);
NotNull = true;
}
else
{
Create();
}
} while (!NotNull);
}
//moving pointer forward;
void Next()
{
bool NotNull = false;
do
{
if (ptr != NULL)
{
*(ptr++);
NotNull = true;
}
else
{
Create();
}
} while (!NotNull);
}
//to point at the start of array
void Start()
{
bool NotNull = false;
do
{
if (ptr != NULL)
{
ptr = &arr[0];
NotNull = true;
}
else
{
Create();
}
} while (!NotNull);
}
//to move pointer to the end
void End()
{
bool NotNull = false;
do
{
if (ptr != NULL)
{
ptr = &arr[size - 1];
NotNull = true;
}
else
{
Create();
}
} while (!NotNull);
}
//to add a block into array
void Add()
{
int NewSize = size + 1;
int *temp = new int[NewSize];
for (int i = 0; i < size; i++)
{
temp[i] = arr[i];
}
size = NewSize;
ptr = temp;
if (arr != NULL)
{
delete[] arr;
}
arr = NULL;
arr = temp;
cout << "You have been provided a new block to add 1 data entry\n";
cout << "Enter value :\t";
cin >> arr[size - 1];
}
};
int main() //main made just for testing above method's working
{
Runner *obj = new Runner();
obj->get(3);
obj->Update(20);
cout << obj->length() << "\n";
obj->Next();
obj->End();
obj->Back();
obj->Start();
obj->Add();
delete obj;
_getch();
return 0;
}
Ну, часть кода, которая дает мне ошибку, это метод Add, в котором мне нужно увеличить размер массив без использования realloc()
.
Метод добавления выглядит следующим образом:
void Add()
{
int NewSize = size + 1;
int *temp = new int[NewSize];
for (int i = 0; i < size; i++)
{
temp[i] = arr[i];
}
size = NewSize;
ptr = temp;
if (arr != NULL)
{
delete[] arr; //the point where heap corruption error occurred
}
arr = NULL;
arr = temp;
cout << "You have been provided a new block to add 1 data entry\n";
cout << "Enter value :\t";
cin >> arr[size - 1];
}
Помогите мне в решении этой проблемы.