Что я делаю не так?
Не использовать std::vector
- это то, что вы делаете неправильно.
Если не считать, что это для обучения или домашней работыили что-то:
initArray(a,n);
Эта строка копирует указатель int
a
.Копия внутри функции будет назначена, а копия в основном останется пустой.Вам необходимо использовать передачу по ссылке, либо через ссылки C ++, либо в стиле C с указателями:
void initArray(int*& a, int size){
// everything the same
}
Это изменит указатель int в main без каких-либо других изменений.
void initArray(int** a, int size){
// need to dereference the pointer-to-pointer to access the int pointer from main
*a = new int[size];
for(/*...*/){
(*a)[i] = /*...*/;
}
}
Для этого вам также потребуется изменить сторону вызова:
initArray(&a, n); // pass pointer to a
Теперь еще одна вещь: main
даже не знает, что initArray
даже существует.Вам нужно поставить его выше main
или, по крайней мере, вперед объявить его:
void initArray(int*& a, int size); // forward declaration
int main(){
// ...
}
void initArray(int*& a, int size){
// ...
}
И последнее: вам нужно delete[]
массив в main.