в вашей функции
for (int i = 0; i < dim - 1; i++) {
ptr_array = (temp+i); // Will it remember what is temp+1 if I have
// already overwritten the arrays?
ptr_array++;
}
ничего не делает, ты хотел
for (int i = 0; i < dim - 1; i++) {
ptr_array[i] = temp[i];
}
Обратите внимание, что delete в вашем комментарии недействителен, потому что вы не удаляете результат нового [], а указатель внутри выделенного массива
Если звонок как
int * v = ...;
del(v);
// here v is unchanged
возможно, вы хотели изменить v , в этом случае вы можете вернуть новый массив или использовать переменную ввода-вывода, используя ссылку
Первая возможность:
int* del (int* ptr_array, int dim) {
int* new_array = new int[dim - 1];
for (int i = 0; i < dim - 1; i++) {
new_array[i] = ptr_array[i];
}
delete[] ptr_array;
return new_array;
}
с
int * v = ...;
v = del(v);
Вторая возможность
void del (int*& ptr_array, int dim) {
int* new_array = new int[dim - 1];
for (int i = 0; i < dim - 1; i++) {
new_array[i] = ptr_array[i];
}
delete[] ptr_array;
ptr_array = new_array;
}
с
int * v = ...;
del(v);
// here v is the new array
Предупреждение: эти коды предполагают, что входной массив содержит хотя бы один элемент
Однако использование std::vector<int>
делает все это за вас и более практично в использовании
std::vector<int> v;
...
v.resize(v.size() - 1);
или
std::vector<int> v;
...
v.pop_back();