Adi*_*raj 3 c++ memory pointers memory-management
据我所知,堆本应该是全球性的,不是吗?所以我们应该能够在函数中的任何地方访问堆内存.那么为什么以下代码会出现段错误(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;
}
Run Code Online (Sandbox Code Playgroud)
发生分段错误是因为指针a
正在按值传递,因此内部所做的更改A()
对调用者不可见,从而导致NULL
指针被取消引用B()
.要更正,请通过引用传递指针A()
:
void A(int*& x)
Run Code Online (Sandbox Code Playgroud)