gpt4 book ai didi

c - 静态动态内存是否会在程序结束时自动释放?

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:07 26 4
gpt4 key购买 nike

static 关键字使指针保持事件状态直到程序终止,但是分配给指针 buffer 的内存是否会在进程终止时自动释放?还是程序员必须这样做?


在下面的例子中,我们不知道该函数将被调用多少次,如果我们在当前函数调用时没有读取任何内容,我们只能释放分配的内存。否则无法释放内存,因为我们将需要在下一次调用中使用刚刚读取的字节。


函数:

char *readStdin(void) {
static char *buffer = NULL;
ssize_t ret;

if (buffer != NULL) {
// DO SOMETHING WITH PREVIOUSLY READ BYTES
}
/* Allocate and NULL-terminate a Buffer */
buffer = malloc(BUFSIZ);
if (buffer == NULL)
return (NULL);
buffer[BUFSIZ] = '\0';

/* Read from Standard Input at most 'BUFSIZ' characters*/
ret = read(0, buffer, BUFSIZ);

/* Free Buffer if no Input Read */
if (ret <= 0) {
free(buffer);
buffer = NULL;
}

/* Return the read Input */
return (buffer);
}

程序:

int main(void) {
/* Print the Read Bytes */
printf("%s", readStdin());
printf("%s", readStdin());
printf("%s", readStdin());
...
}

最佳答案

is the memory allocated to the pointer buffer free'd automatically when the process terminates ?

这取决于。在大多数现代台式机和服务器上,是的。在一些较旧的系统或一些现代的古怪系统上,不一定。最佳做法是,无论程序退出时操作系统做什么,都要自己清理。

动态内存的确切管理方式,以及程序退出后动态内存会发生什么,语言标准并未指定 - 这完全取决于您的程序运行的平台。

通常,您应该将所有动态内存指针保存在某处,以便您可以在必要时执行一些清理工作。此外,总是检查malloccallocrealloc 的结果。不要盲目地假设他们总是成功的。

关于c - 静态动态内存是否会在程序结束时自动释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55186992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com