这是动态内存分配吗?

时间:2009-01-08 03:14:08

标签: c++ c memory memory-management new-operator

简单问题:我必须deletedelete [] c吗?语言是否重要?

char c[] = "hello"

4 个答案:

答案 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)

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