为什么最后 newarr的堆释放了void add(people** arr, const int nov) { people* p = new people(); cout << "enter name" << endl; cin >> p->name; cout << "enter work" << endl; cin >> p->work; cout << "enter handlework" << endl; cin >> p->handlework; p->nov = nov; people** newarr = new people * [nov]; newarr[nov - 1] = p; for (int i = 0; i < nov - 1; i++) { newarr[i] = arr[i]; } //delete[]arr; *arr = *newarr; }
时间: 2024-04-17 18:25:15 浏览: 155
最后释放`newarr`的堆是因为在函数中我们使用了`new`关键字来分配了内存空间。当我们不再需要这个内存空间时,我们需要使用`delete`关键字来释放它,以避免内存泄漏。
在这段代码中,`newarr`是一个指向指针数组的指针。我们首先使用`new`关键字为`newarr`分配了一个长度为`nov`的指针数组。然后,我们将原始数组`arr`的元素复制到`newarr`中,并将新的指针数组赋值给原始数组`arr`。最后,我们没有释放`newarr`指向的内存空间。
为了正确释放内存,我们应该在函数的末尾添加以下代码:
```cpp
delete[] newarr;
```
这将释放`newarr`指向的指针数组所占用的内存空间。
相关问题
为什么void add(people** arr, const int nov) { people* p = new people(); cout << "enter name" << endl; cin >> p->name; cout << "enter work" << endl; cin >> p->work; cout << "enter handlework" << endl; cin >> p->handlework; p->nov = nov; people** newarr = new people * [nov]; newarr[nov - 1] = p; for (int i = 0; i < nov - 1; i++) { newarr[i] = arr[i]; } //delete[]arr; arr = newarr; }取不到newarr的值
在这段代码中,`void add(people** arr, const int nov)`函数中的`arr`参数是一个指向指针数组的指针。当我们在函数内部对`arr`进行修改时,实际上只是修改了指针本身的值,并不会修改指针指向的内存空间。
在这段代码中,`arr = newarr;`语句只是将`arr`指针指向了`newarr`指针数组的内存空间,并没有修改原始指针数组的内容。因此,在函数外部访问`arr`时,无法获取到`newarr`的值。
如果你想要修改原始指针数组的内容,你需要将`arr`声明为指向指针数组的引用,即`people**& arr`。这样,在函数内部修改`arr`时,会直接修改原始指针数组的内容。
修改后的代码如下:
```cpp
void add(people**& arr, const int nov) {
people* p = new people();
cout << "enter name" << endl;
cin >> p->name;
cout << "enter work" << endl;
cin >> p->work;
cout << "enter handlework" << endl;
cin >> p->handlework;
p->nov = nov;
people** newarr = new people * [nov];
newarr[nov - 1] = p;
for (int i = 0; i < nov - 1; i++) {
newarr[i] = arr[i];
}
delete[] arr;
arr = newarr;
}
```
这样,当你调用`add`函数并传入指针数组的引用时,`arr`的修改将会影响到原始指针数组。
public static int[] Disorder(int[] arr) { int[] newArr = new int[20]; // for (int i = 0; i < newArr.length; i++) { // newArr[i] = arr[i]; // } newArr = Arrays.copyOf(arr,20); Random r = new Random(); int temp; for (int i = newArr.length - 1; i > 0; i--) { int j = r.nextInt(i); temp = newArr[i]; newArr[i] = newArr[j]; newArr[j] = temp; } return newArr; }实现了什么功能
这个方法名为Disorder,可以翻译为“打乱”的意思。该方法的功能是将传入的整型数组arr中的元素打乱,并返回一个新的长度为20的整型数组。方法中首先使用Arrays.copyOf方法将传入的数组arr拷贝到一个新数组newArr中,然后使用Random类生成一个随机数,将newArr中的元素进行随机打乱,最后返回打乱后的newArr数组。
阅读全文