Я сейчас участвую в C++ и в настоящее время изучаю динамическое распределение памяти. Вот код, который я в настоящее время работает с:Динамическое выделение памяти - C++
#include <iostream>
using namespace std;
int *memAdd(int* dyn_Point, int *lenPoint){
int *new_Dyn_Point = new int[*lenPoint * 2];
*lenPoint = *lenPoint * 2;
for(int i = 0; i < *lenPoint; i++){
new_Dyn_Point[i] = dyn_Point[i];
}
delete lenPoint;
delete[] dyn_Point;
return new_Dyn_Point;
}
int main(){
int len = 2;
int *lenPoint = &len;
int current = 0;
int val;
int *dyn_Point = new int[len];
cout << "Input a value for point 1: ";
cin >> val;
dyn_Point[current] = val;
while(val > 0){
current++;
cout << "Input a value for point " << current+1 <<" (0 to exit): ";
cin >> val;
if(current+1 == len){
*dyn_Point = *memAdd(dyn_Point, lenPoint);
cout << len;
}
dyn_Point[current] = val;
}
for(int i = 0; i < len; i++){
cout << &dyn_Point[i] << "\n";
cout << dyn_Point[i] << "\n\n";
}
delete[] dyn_Point;
}
Мой вопрос: При добавлении дополнительной памяти это должно увеличиваться на определенное значение?
Всякий раз, когда я начинаю со значения в моей переменной «len», которая не является 2, моя программа будет разбиваться, как только я попытаюсь выделить больше памяти или после выделения большего количества памяти, и еще больше нужно добавить второй раз ,
Это так, как это должно быть, или я чего-то не хватает здесь?
Этот вопрос может быть в: while (val> 0) { current ++; Это первое ++ дает вам 1 для текущего, тогда вы переходите к текущему + 1 в чеке в if-statement, чтобы добавить память, так что только если len == 2 вы добавляете память. –
Вы копируете в два раза больше данных, чем должны. Это может привести к сбою. –
Также 'delete lenPoint' ошибочно, поскольку он не указывает на динамический объект. –