C++程序无法分配 int 数组?

C++ program can't allocate int array?

本文关键字:int 数组 分配 程序 C++      更新时间:2023-10-16

我是C++新手,只是学习指针,并尝试使用指针和数组创建一个简单的数字线程序(我知道我可以用更简单的方式做到这一点,但这只是为了练习(。但是,当我尝试运行我的代码时,它在尝试分配数组时冻结。

#include<iostream>
using namespace std;
void createLine(int* p_line, int size);
void printLine(int* p_line, int size);
int main(){
int* p_line = NULL;
int size = 0;
cout << "Enter the size of the number line: ";
cin >> size;
createLine(p_line, size);
printLine(p_line, size); //It doesn't work when printLine is here
delete[] p_line;
}
void createLine(int* p_line, int size){
cout << "Size of the number line: " << size << "." << endl;
p_line = new int[size];
for(int i = 0; i < size; i++){
p_line[i] = i + 1;
}
//If printLine is here, it works
}
void printLine(int* p_line, int size){
cout << "Printing line: ";
for(int i = 0; i < size; i++){
cout << p_line[i] << " , ";
}
}

奇怪的是,如果我将printLine调用移动到createLine的末尾,程序运行良好。我尝试在互联网上查找,但我发现的所有内容似乎都表明这应该运行良好。

我能想到的唯一解释是,该程序在 createLine 完成运行之前尝试运行 printLine,因此当它仍然是 NULL 时,它会尝试访问p_line。但是,如果我理解正确C++,这不应该发生,对吧?

任何解释将不胜感激,谢谢!

C/C++ 中的参数按值传递。因此,您将放弃对createLine()p_line所做的更改。

您可以返回新值,或使用引用 (int *&p_line( 或使用双指针 (int **p_line(。