如何在C中完全删除数组,直到可以重新初始化它?
如中所示:如何恢复内存,并删除阵列,使其达到稍后在程序中再次初始化的程度?像这样:如何在C中完全删除数组,直到可以重新初始化它?,c,arrays,C,Arrays,如中所示:如何恢复内存,并删除阵列,使其达到稍后在程序中再次初始化的程度?像这样: char * array[][2] = { {"bla","bla","bla"}, {"blabity","blabity","bla"} } // Delete array sizeof(array) == NULL; char * array[][2] = { {"bla","bla","bla"}, {"blabity","blabity","bla"} } 不能销毁静态初始化的数组,因为它们的生存期是
char * array[][2] = {
{"bla","bla","bla"},
{"blabity","blabity","bla"}
}
// Delete array
sizeof(array) == NULL;
char * array[][2] = {
{"bla","bla","bla"},
{"blabity","blabity","bla"}
}
不能销毁静态初始化的数组,因为它们的生存期是整个程序的生存期。您可以随时轻松地分配更多的静态数组—无需先解除分配旧的静态数据。您不能任意销毁静态和/或函数本地对象
唯一可以显式控制其生存期的对象是动态分配的对象(例如,使用
malloc
)。您不能。使用括号定义的数组(在function1的作用域之外)直接编译到程序中,因此无法释放。但是,只需将初始内容再次写入即可重新初始化。如果希望能够随意创建和销毁数组,则需要将其存储为指针,并使用malloc
和free
1:在函数中,数组将在每次运行函数时在堆栈上创建,并在退出时销毁,除非它被定义为静态变量。您仍然无法在不返回的情况下解除分配它。使用“malloc系列”:、和
别忘了加入#
sizeof(array)==NULL
?你不能,不完全是这样-变量是在一个作用域中定义的,一旦定义了,就不能不定义。是的,sizeof
这只是一个猜测。我将使用malloc
和free
如何才能malloc
一个数组同时设置它的值?(或者你不会吗?@JV你可以使用带有静态数组的memcpy
来一次性设置整个内容,但除此之外,你必须单独设置。你可以轻松地销毁函数本地对象。只需从函数返回即可。@williampersell:这不是“任意”的。