情况是:
let maxLen = Math.max.apply(null, arrays.map(v => v.length)), out = [];
当我想要删除我的数组时,我会这样做:
int main ()
{
int *p1 = new int[50];
int *p2 = p1;
...
我也可以这样做:
delete[] p1;
答案 0 :(得分:4)
两个指针都指向同一个内存,因此您可以在delete[]
时使用其中一个。但只执行一次,删除已删除的内存是未定义的行为。因此,如果您执行delete[] p1;
,那么您也无法delete[] p2;
执行mysql_num_rows()
。
答案 1 :(得分:0)
如果不深入研究详细信息,删除操作符的定义将按以下方式进行查看
delete expression
delete [ ] expression
正如您所看到的,它使用了一个表达式(更准确地说是一个强制转换表达式)。例如,你可以写
int *p1 = new int[50];
int *p2 = p1 + 50;
delete [] ( p2 - 50 );
(请注意,您必须用括号表达式p2 - 50括起来。)
计算表达式,并将其值用作要删除的内存的地址。
删除内存后,您可能无法访问它。否则,程序的行为将是不确定的。
答案 2 :(得分:-1)
由于p2指向由p1分配的相同内存块,因此可以使用p2来擦除该内存块。
您可以通过运行以下代码来验证这一点......
#include <iostream>
using namespace std;
int main()
{
int* p1 = new int[10];
int* p2 = nullptr;
for (int i = 0; i < 10; i++) {
p1[i] = i * i;
}
// 1st run
for (int i = 0; i < 10; i++) {
cout << p1[i] << " ";
}
cout << endl;
p2 = p1;
if (p2 != nullptr) {
delete p2;
}
// 2nd run;
for (int i = 0; i < 10; i++) {
cout << p1[i] << " ";
}
p1 = nullptr;
p2 = nullptr;
return 0;
}
第二次运行p1数组显示该数组的内容已被delete p2
操作删除,该操作放在if语句中以确保安全。
一旦使用完毕,可以将两个指针放在一边,将它们等同于nullptr
关键字。