gpt4 book ai didi

memory - 字符串的连续赋值会导致内存泄漏吗?

转载 作者:行者123 更新时间:2023-12-01 01:26:45 25 4
gpt4 key购买 nike

我有两个问题:

一季度。字符指针用于指向存储给定字符串的位置。如果我们不断重新分配字符串,是否会导致内存泄漏?

在 Linux 系统上,我看到:

$ cat chk.c
#include <stdio.h>

#define VP (void *)

int main()
{
char *str;

str = "ABC";
printf("str = %p points to %s\n", VP str, str);

str = "CBA";
printf("str = %p points to %s\n", VP str, str);

return 0;
}

$ cc chk.c && ./a.out
str = 0x8048490 points to ABC
str = 0x80484ab points to CBA
$

Q2。如上所述可以分配的字符串的最大长度是多少?

最佳答案

您的示例代码内存泄漏吗?
不。
您已经在程序中分配了常量字符串,因此不会发生额外的内存分配。

内存泄漏来自被遗忘的 malloc() 类型调用,或在内部执行您可能不知道的 mallocs() 类型操作的调用。小心那些返回内存指针的函数……比如 strdup()。这往往要么不是线程安全的,要么泄漏内存,如果不是两者兼而有之的话。更好的是像 snprintf() 这样的函数,其中调用者提供内存缓冲区和最大大小。这些功能不会泄漏。

最大字符串长度:除了可用内存之外,没有人为限制。堆栈中的内存可能受到各种约束(char can_be_too_big[1_000_000])的限制,但 malloc() 中的内存不受限制。 malloc 内存是一个关于你有多少空闲内存的问题 (char * ok = malloc(1_000_000)。你的本地 size_t 提供了理论上可以分配的最大内存,但实际上它要小得多。

关于memory - 字符串的连续赋值会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7295238/

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