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

Program crashes (Dynamic memory allocation)

本文关键字:分配 内存 动态 崩溃 程序      更新时间:2023-10-16

我刚刚开始阅读有关动态内存分配的信息,由于某种原因,我的程序崩溃了。

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);
}

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

int* ptr是指针的本地副本,所以你只在getSpace的作用域内分配内存,并将其分配给ptr变量,但它是getScope的本地,所以main函数看不到分配。你应该做int** ptr*ptr = new int[100];,或者int*& ptr然后ptr = new int[100];

更改为:

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

并称之为:

getSpace(&ptr);