C++程序不能分配int数组?
C++ program can't allocate int array?
我是 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 完成 运行ning 之前尝试 运行 printLine,因此它会在它仍然为 NULL 时尝试访问 p_line .但如果我正确理解 C++,这应该不会发生,对吧?
任何解释将不胜感激,谢谢!
C/C++ 中的参数按值传递。因此,您在 createLine()
中对 p_line
所做的更改将被丢弃。
您可以 return 新值,或使用引用 (int *&p_line
) 或使用双指针 (int **p_line
)。
我是 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 完成 运行ning 之前尝试 运行 printLine,因此它会在它仍然为 NULL 时尝试访问 p_line .但如果我正确理解 C++,这应该不会发生,对吧?
任何解释将不胜感激,谢谢!
C/C++ 中的参数按值传递。因此,您在 createLine()
中对 p_line
所做的更改将被丢弃。
您可以 return 新值,或使用引用 (int *&p_line
) 或使用双指针 (int **p_line
)。