简单问题:我必须delete
或delete []
c
吗?语言是否重要?
char c[] = "hello"
答案 0 :(得分:12)
在c ++中不是动态内存分配。不需要delete[]
。
你的例子基本上是一个捷径:
char c[6]={'h','e','l','l','o','\0'};
答案 1 :(得分:12)
C ++中的规则是,只要您使用delete[]
,就会使用new[]
,而delete
则使用new
。如果您不使用new
,就像在您的示例中一样,您不需要delete
任何内容。
在您的示例中,c
数组的六个字节在堆栈上分配,而不是在堆上分配,如果在函数内声明的话。由于这些字节在堆栈上,因此只要声明它们的函数返回它们就会消失。
如果该声明超出任何功能,那么这六个字节将在全局数据区域中分配,并在程序的整个生命周期内保持不变。
答案 2 :(得分:2)
当你在堆上放东西时动态分配内存。在这里,您将在堆栈上分配变量。如果您正在使用new运算符或malloc调用,那么您将把变量放在堆上。
你需要使用delete(w / new)或free(w / malloc)来释放堆上的内存。当函数/方法返回时,堆栈将自动释放。
答案 3 :(得分:1)
不,数组在编译时调整大小。