C ++程序不能分配int数组?

时间:2017-08-05 16:47:23

标签: c++ pointers dynamic-memory-allocation

我是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 ++,这不应该发生,对吧?

非常感谢任何解释,谢谢!

1 个答案:

答案 0 :(得分:1)

C / C ++中的参数按值传递。因此,您对p_linecreateLine()的更改将被废弃。

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