g++ 警告删除一个代码的数组,但不删除另一个代码
g++ gives warning for deleting an array for one code but not the other
我有 Java 背景,对指针和其他东西的工作原理仍然感到困惑。我有 2 个例子。
int arr[10] = {};
delete[] arr;
在这里,我的编译器抛出了关于删除 arr
.
的警告
int *arr = new int[4];
delete[] arr;
但它不会在这里发出警告?这是为什么?
在您的第一个代码中,arr
是静态分配的(在堆栈上),超出范围时会自动释放。对静态分配的变量调用 delete[]
毫无意义。
在您的第二个代码中,arr
是在堆上动态分配的,并且 不会 在超出范围时自动释放,因此需要调用 delete[]
就可以了。
在此处获取有关 delete 正确用法的更多信息:C++ and when to use delete
我有 Java 背景,对指针和其他东西的工作原理仍然感到困惑。我有 2 个例子。
int arr[10] = {};
delete[] arr;
在这里,我的编译器抛出了关于删除 arr
.
int *arr = new int[4];
delete[] arr;
但它不会在这里发出警告?这是为什么?
在您的第一个代码中,arr
是静态分配的(在堆栈上),超出范围时会自动释放。对静态分配的变量调用 delete[]
毫无意义。
在您的第二个代码中,arr
是在堆上动态分配的,并且 不会 在超出范围时自动释放,因此需要调用 delete[]
就可以了。
在此处获取有关 delete 正确用法的更多信息:C++ and when to use delete