gpt4 book ai didi

c++ - 为什么不同的指针会表现得好像它们共享相同的值?

转载 作者:太空狗 更新时间:2023-10-29 23:50:44 25 4
gpt4 key购买 nike

下面我使用了两个不同的函数来初始化一个二维数组。每个都返回一个数组,该数组存储在适当的指针中。没有全局变量。当一个人被赋予一个值(value)时,他们都表现得好像他们已经收到了它一样。代码和日志说明。

尽我所能,我不明白为什么这是有道理的。起初,两个未初始化的值都是有意义的。但在那之后为什么设置 A 也设置 B 相同?为什么设置 B 会覆盖 A?

代码:

#include <iostream>

int **MakePtrArrayA( int Size ){
int ** myArr = new int*[ Size ];
for( int x=0; x<Size; x++ ){
myArr[x] = new int;
}
return myArr;
}

int **MakePtrArrayB( int Size){
int ** myArr;
for( int x=0; x<Size; x++ ){
myArr[x] = new int[ Size ];
}
return myArr;
}

int main(){
int ** arrA = MakePtrArrayA( 5 );
int ** arrB = MakePtrArrayB( 5 );
std::cout << "A:" << arrA[4][4] << std::endl << "B:" << arrB[4][4] << std::endl;
arrA[4][4] = 16;
std::cout << "A:" << arrA[4][4] << std::endl << "B:" << arrB[4][4] << std::endl;
arrB[4][4] = 15;
std::cout << "A:" << arrA[4][4] << std::endl << "B:" << arrB[4][4] << std::endl;

return 0;
}

日志:

A:0
B:0
A:16
B:16
A:15
B:15

最佳答案

MakePtrArrayB 使用未初始化的指针调用未定义的行为。

未定义的行为可以是任何,但在您的情况下,MakePtrArrayB 中的myArr 指针可能与MakePtrArrayA,因此循环访问原始数组(将其设置为新分配的行缓冲区,这些缓冲区足够大以供后续访问)。

但是您不能依赖这种行为。修复错误。

关于c++ - 为什么不同的指针会表现得好像它们共享相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27715714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com