1

简单的问题:我必须delete还是delete [] c?语言重要吗?

char c[] = "hello"
4

4 回答 4

12

在 c++ 中,这不是动态内存分配。不需要delete[]

你的例子基本上是一个捷径:

char c[6]={'h','e','l','l','o','\0'};
于 2009-01-08T03:15:00.123 回答
12

C++ 中的规则是,delete[]无论何时使用new[]delete都使用new. 如果您不使用new,如您的示例中所示,则不需要delete任何东西。

在您的示例中,如果在函数中声明,则数组的六个字节c分配在堆栈上,而不是堆上。由于这些字节在堆栈上,因此一旦声明它们的函数返回,它们就会消失。

如果该声明在任何函数之外,那么这六个字节将分配在全局数据区域中,并在程序的整个生命周期中一直存在。

于 2009-01-08T03:24:19.310 回答
2

当您将某些东西放在堆上时,您会动态分配内存。在这里,您在堆栈上分配变量。如果您使用的是 new 运算符或 malloc 调用,您会将变量放在堆上。

您需要使用 delete (w/new) 或 free (w/malloc) 来释放堆上的内存。当函数/方法返回时,堆栈将被自动释放。

于 2009-01-08T04:21:38.477 回答
1

不,数组是在编译时调整大小的。

于 2009-01-08T03:18:23.160 回答