内存泄漏问题在C后移动指针(究竟是什么释放?)

内存泄漏问题在C后移动指针(究竟是什么释放?),第1张

概述我意识到下面的代码示例是你不应该做的.我的问题只是一个兴趣.如果你分配一个内存块,然后移动指针(一个no-no),当你释放内存时,释放块的大小是多少,内存在哪里呢?以下是设计的代码段: #include <stdio.h>#include <string.h>int main(void) { char* s = malloc(1024); strcpy(s, "Some st 我意识到下面的代码示例是你不应该做的.我的问题只是一个兴趣.如果你分配一个内存块,然后移动指针(一个no-no),当你释放内存时,释放块的大小是多少,内存在哪里呢?以下是设计的代码段:
#include <stdio.h>#include <string.h>int main(voID) {    char* s = malloc(1024);    strcpy(s,"Some string");    // Advance the pointer...    s += 5;    // Prints "string"    printf("%s\n",s);    /*     * What exactly are the beginning and end points of the memory      * block Now being deallocated?     */    free(s);    return 0;}

这是我认为我发生的事情.被释放的内存块以“string”中的字母“s”开头.持有“Some”的5个字节现在已丢失.

我想知道的是:内存中的5个字节的位置是否在原始的1024个字节结束之后立即释放,还是只剩下一个?

任何人都知道编译器是做什么的?是不是有定义?

谢谢.

解决方法 你不能传递一个没有从malloc,calloc或realloc获取到的空格(NulL除外)的指针.

C0 FAQ中的Question 7.19与您的问题相关.

consequences of invoking undefined behavior被解释为here.

总结

以上是内存溢出为你收集整理的内存泄漏问题在C后移动指针(究竟是什么释放?)全部内容,希望文章能够帮你解决内存泄漏问题在C后移动指针(究竟是什么释放?)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1254269.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存