C++ 动态分配的指针数组中的悬空指针

C++ 动态分配的指针数组中的悬空指针,c++,arrays,pointers,memory,allocation,C++,Arrays,Pointers,Memory,Allocation,这是一个悬空的指针吗 int x = 25; int** arr = new int*[5]; *arr[1] = x; 我不明白为什么这不起作用*arr[1]只是一个指针,指向一个有效的内存地址。arr[1]是一个int*,未初始化。取消引用它是未定义的行为 你可以说arr[1]=&x,则arr[1]将指向x,*arr[1]将为25 不要忘记delete[]arr完成后。arr[1]是一个int*,未初始化。取消引用它是未定义的行为 你可以说arr[1]=&x,则arr[1]将指向x,*a

这是一个悬空的指针吗

int x = 25;
int** arr = new int*[5];
*arr[1] = x;

我不明白为什么这不起作用*arr[1]只是一个指针,指向一个有效的内存地址。

arr[1]
是一个
int*
,未初始化。取消引用它是未定义的行为

你可以说
arr[1]=&x
,则
arr[1]
将指向
x
*arr[1]
将为25



不要忘记
delete[]arr完成后。

arr[1]
是一个
int*
,未初始化。取消引用它是未定义的行为

你可以说
arr[1]=&x
,则
arr[1]
将指向
x
*arr[1]
将为25



不要忘记
delete[]arr完成后。

arr[1]在哪里分配(即,它当前未使用您的代码初始化)?@H2CO3:这只是少量UB。就UB/post而言,这是比较温和的案例之一@KerrekSB我今天最喜欢的是违反了
restrict
关键字-OP在自己身上快速填充缓冲区。真遗憾(我甚至没有因为指出这一点而获得任何赞成票)。顺便说一句,悬空指针是指向已释放但未设置回NULL的内存的指针。因此,如果您不小心访问了该指针,认为它仍然是“好的”,那么“坏的”事情就会发生。arr[1]是在哪里分配的(即,它目前未被您的代码初始化)?@H2CO3:这只是少量的UB。就UB/post而言,这是比较温和的案例之一@KerrekSB我今天最喜欢的是违反了
restrict
关键字-OP在自己身上快速填充缓冲区。真遗憾(我甚至没有因为指出这一点而获得任何赞成票)。顺便说一句,悬空指针是指向已释放但未设置回NULL的内存的指针。因此,如果您不小心访问了该指针,认为它仍然是“好的”,“坏的”事情将会发生。TWA是一个语法问题,那么…出于某种原因,我认为该行取消了对int**本身的引用,而不是对指定位置中的int**的引用。谢谢Kerreck@TaylorBishop:没问题:-)TWA是一个语法问题……出于某种原因,我认为行是在取消对int**本身的引用,而不是对指定位置的int**的引用。谢谢Kerreck@泰勒商店:没问题:-)