C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了内存泄漏问题在C后移动指针(究竟是什么释放?)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我意识到下面的代码示例是你不应该做的.我的问题只是一个兴趣.如果你分配一个内存块,然后移动指针(一个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);
    /*
     * @R_197_10112@ 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后移动指针(究竟是什么释放?)所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。