gpt4 book ai didi

c - 这是不好的做法吗?将指向空白字符串的指针重定向到另一个字符串?

转载 作者:太空狗 更新时间:2023-10-29 15:17:49 27 4
gpt4 key购买 nike

考虑这个片段,

char *p1="";
printf("p1=%p\np1=%s\n",p1,p1);

char s1[6]="abcde";
printf("s1=%p\ns1=%s\n",s1,s1);

p1=s1;

printf("p1=%p\np1=%s\n",p1,p1);

因为没有变量分配在堆上,所有分配的空间都将在进程结束时释放。

问题:

  • 当指向它的指针被重定向到另一个字符串时,空白字符串会发生什么? (根据我的基本 Java 知识,在 Java 的情况下,空白字符串将有资格被 GC 收集。这里发生了什么?)
  • 如果代码较长,空白字符串会不会占用内存到最后?
  • Valgrind 不报告内存泄漏(我想这仅指堆内存?)。这种编码实践是否会导致瓶颈?

最佳答案

您的字符串 """abcde" 位于可执行文件的(只读)数据部分。当您的程序加载时,它们被加载到内存中。

当没有更多的指针指向它时,就没有更多的指针指向它。就这样。

程序有很多只读数据(例如,整个程序的代码!)这并不是真正需要关心的事情。

这不被认为是内存泄漏,就像拥有一个永远不会被调用的函数不是内存泄漏一样。程序加载后,不会分配或取消分配任何内容。

关于c - 这是不好的做法吗?将指向空白字符串的指针重定向到另一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23778852/

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