这是动态内存分配吗?

1 c c++ memory memory-management new-operator

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

char c[] = "hello"
Run Code Online (Sandbox Code Playgroud)

Gor*_*son 12

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

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

char c[6]={'h','e','l','l','o','\0'};
Run Code Online (Sandbox Code Playgroud)


Gre*_*ill 12

C++中的规则是您delete[]在任何时候使用new[],delete无论何时使用new.如果你不使用new,就像在你的例子中,你不需要delete任何东西.

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

如果该声明超出任何函数,那么这六个字节将在全局数据区域中分配,并在程序的整个生命周期内保持不变.