我试图理解当我为一个数组指针分配另一个数组时,C++中会发生什么.说我有:
int *a = new int[10];
int *b = new int[10];
for (int i =0; i< 10; i++) {
a[i] = i;
}
b=a;
Run Code Online (Sandbox Code Playgroud)
当我打印出我的值得b到相同的值a.说得通.但实际上在b指针中保存了什么?它是数组的内存地址a吗?我尝试打印出来&a,&b但我得到两个不同的值.然后如何b获得所有的价值a?
另外,如果他们单独存储将a在转移后删除吗?delete [] a
谢谢我对C++很陌生,任何帮助都会很棒.
首先,您不会将一个数组分配给另一个数组,而是将一个指针指向另一个指针.如果仅靠这一点并不能让您更容易理解正在发生的事情,那么请继续阅读......
当你这样做
int *a = new int[10];
int *b = new int[10];
Run Code Online (Sandbox Code Playgroud)
你会得到这样的东西:
+---+ +------------------------+ | a | ---> | Memory allocated for a | +---+ +------------------------+ +---+ +------------------------+ | b | ---> | Memory allocated for b | +---+ +------------------------+
任务完成后
b = a;
Run Code Online (Sandbox Code Playgroud)
它看起来像这样
+---+ +------------------------+
| a | -+-> | Memory allocated for a |
+---+ | +------------------------+
|
+---+ | +------------------------+
| b | -/ | Memory allocated for b |
+---+ +------------------------+
换句话说,b指向相同的内存a,没有任何内容指向最初分配的内存,b因此无法访问,并且您将有内存泄漏.
此外,尝试做
delete[] a;
delete[] b;
Run Code Online (Sandbox Code Playgroud)
当您尝试两次释放相同的内存时,将导致未定义的行为.