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)。