如下:如何恢复内存,并将数组删除到可以在程序中稍后再次初始化的程度?像这样:
char * array[][2] = {
{"bla","bla","bla"},
{"blabity","blabity","bla"}
}
// Delete array
sizeof(array) == NULL;
char * array[][2] = {
{"bla","bla","bla"},
{"blabity","blabity","bla"}
}
答案 0 :(得分:5)
你做不到。使用括号定义的数组(在函数 1 范围之外)直接编译到程序中,因此无法取消分配。但是,您可以通过再次将初始内容写入其中来重新初始化它。如果您希望能够随意创建和销毁数组,则需要将其存储为指针并使用malloc
和free
。
1 :在函数中,每次运行函数时都会在堆栈上创建数组,并在退出时销毁它,除非它被定义为静态变量。你仍然无法在不返回的情况下解除分配。
答案 1 :(得分:2)
您无法销毁静态初始化的数组,因为它们的生命周期是整个程序的生命周期。您可以随时轻松分配更多静态数组 - 无需先释放旧的静态数据。
答案 2 :(得分:2)
您不能随意销毁静态和/或功能本地对象。
您可以明确控制其生命周期的唯一对象是动态分配的对象(例如,使用malloc
)。
答案 3 :(得分:1)