A * pObjArrary = new A[10]; for(int i = 0;i<10;i++){delete &pObjArrary[i];}有什么问题
时间: 2023-04-06 18:01:01 浏览: 65
pObjArrary[i];}这段代码有什么问题?如何修改?
这段代码存在内存泄漏的问题,因为在使用 new 关键字动态分配内存后,没有使用 delete 关键字释放内存。应该在循环中加上 i++,即 for(int i = 0;i<10;i++),并在循环结束后使用 delete[] pObjArrary; 释放内存。修改后的代码如下:
A * pObjArrary = new A[10];
for(int i = 0;i<10;i++){
delete pObjArrary[i];
}
delete[] pObjArrary;
相关问题
int **c=new int*[10]; for(int i=0;i<10;i++) int *c[i]=new int;
这段代码是用来动态分配一个二维数组的内存空间。首先,使用new关键字分配一个长度为10的int类型指针数组c,即c是一个指向int类型指针的指针;然后,循环10次,对于每个c[i],再使用new关键字动态分配一个int类型的变量。最后,c就是一个指向一个10行1列的二维数组的指针,可以通过c[i][j]来访问元素。但是需要注意的是,在使用完这个二维数组后,需要使用delete[]释放内存空间,避免内存泄漏。完整的代码如下:
```
int **c = new int*[10];
for(int i = 0; i < 10; i++) {
c[i] = new int;
}
// 使用二维数组
...
// 释放内存空间
for(int i = 0; i < 10; i++) {
delete c[i];
}
delete[] c;
```
解释代码int n = 10,*a=new int [n]; for(int i =0;i < n;++i) a[i] = i*I a += 5; *a % 5 != 0;
这段代码定义了一个长度为 10 的 int 数组 `a`,并且通过循环将数组中每个元素初始化为其下标值。
然后,代码执行 `a += 5`,将指针 `a` 向后移动 5 个 int 的长度,此时 `a` 指向数组中第 6 个元素。
接着,代码判断 `*a % 5 != 0`,即判断数组中第 6 个元素是否为 5 的倍数。如果不是,则条件成立,执行相应的语句。如果是,则条件不成立,不执行相应的语句。
需要注意的是,由于指针移动后 `a` 指向数组中第 6 个元素,所以在判断数组中第 6 个元素是否为 5 的倍数时,需要使用 `*a` 取出该元素的值。