我刚刚开始阅读有关动态内存分配的内容,并且由于某些原因我的程序崩溃了。
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);
}
但出于某种原因,这个没有。看起来如果我将指针声明在与将数组放入我想要的堆大小相同的函数中,它就不会崩溃。
答案 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);