Free 似乎正在破坏缓冲区值

问题描述 投票:0回答:1

好吧,我知道释放缓冲区后读取缓冲区是错误的。我试图证明 free() 不会触及缓冲区中存储的数据,但我无法证明:)

这是代码

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
    char *p = malloc(3);
    char *s = p;

    memcpy(p, "aaa", 3);
    free(p);

        printf(" s = ");
        for(int i=0; i<10; i++)
        {
                printf("%c", s[i]);
        }
        printf("\n");

    return 0;
}

% ./a.out
 s = 0?I-E3?

每次运行它,输出都是不同的。

我所看到的有解释吗?现代 malloc 库是否潜入了一些安全功能?如果重要的话,这是在 Mac 上。

我希望看到“aaa”,我怎么看到0?I-E3?

c malloc free
1个回答
0
投票

是的。首先,您读取的字符超出了分配的空间,没有理由假设每次测试时的信息都是相同的。

但是

假设您只循环到分配的数量,即使这样,释放资源基本上也释放了对其的控制,因此无法保证随后它将继续存储您的数据。

© www.soinside.com 2019 - 2024. All rights reserved.