程序崩溃(动态内存分配)

时间:2015-01-15 22:34:55

标签: c++

我刚刚开始阅读有关动态内存分配的内容,并且由于某些原因我的程序崩溃了。

void getSpace(int *ptr)
{
   ptr = new int [100];
}

void getData(int *ptr)
{
   cin >> *(ptr);
   cin >>*(ptr+1);
}
int main()
{
   int *ptr = NULL;
   getSpace(ptr);
   getData(ptr);
}

但出于某种原因,这个没有。看起来如果我将指针声明在与将数组放入我想要的堆大小相同的函数中,它就不会崩溃。

2 个答案:

答案 0 :(得分:2)

int* ptr是指针的本地副本,因此您只在getSpace范围内分配内存,并将其分配到ptr变量,但它是{{1}的本地内容因此getScope函数看不到分配。您应该执行main并执行int** ptr*ptr = new int[100];然后int*& ptr

答案 1 :(得分:0)

更改为:

void getSpace(int **ptr)
{
  *ptr = new int [100];
}

并称之为:

getSpace(&ptr);