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

标签 memory pointers character memory-leaks ansi

我有两个问题:

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

在 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/

相关文章:

c++ - C++中的全局变量内存分配

c++ - 将此类在其构造函数中的引用传递给指针 vector C++

c - 警告 : assignment from incompatible pointer type in linked list struct

string - NSString 中某个字符出现的次数

c++ - 为什么字符 'a' 没有自动转换为 97?

java - Android Parcelable 占用更多内存

c - 如何处理 Linux Crypto API 的多页缓冲区和散点列表?

c - 函数指针的大小取决于哪些参数?

php - 将这些json编码的字符转换为正常的: class=\"timestamp\">test\u003c\/abbr>\u00b7\u003cspan class

c - (void*) -1 的重要性