据我所知,堆在本质上应该是全局的,不是吗?所以我们应该能够在函数中的任何地方访问堆内存。那为什么下面的代码会出现段错误(Segmentation Fault)呢?
#include <stdio.h>
using namespace std;
void A(int* x)
{
x = new int[10];
for(int i = 0; i< 10; i++)
{
x[i] = i;
}
}
void B(int *x)
{
printf("%d", x[8]);
}
int main()
{
int* a = NULL;
A(a);
B(a);
return 0;
}
最佳答案
发生段错误是因为指针 a
正在按值传递,所以在 A()
中所做的更改对调用者不可见,从而导致 NULL
指针在 B()
中被解除引用。要更正,请通过引用将指针传递给 A()
:
void A(int*& x)
关于c++ - 堆内存的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23250284/