加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:16:19 所属栏目:百科 来源:网络整理
导读:我意识到下面的代码示例是你不应该做的.我的问题只是一个兴趣.如果你分配一个内存块,然后移动指针(一个no-no),当你释放内存时,释放块的大小是多少,内存在哪里呢?以下是设计的代码段: #include stdio.h#include string.hint main(void) { char* s = malloc(
我意识到下面的代码示例是你不应该做的.我的问题只是一个兴趣.如果你分配一个内存块,然后移动指针(一个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("%sn",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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读