gpt4 book ai didi

c - malloc实际分配了多少内存?

转载 作者:行者123 更新时间:2023-11-30 19:58:33 28 4
gpt4 key购买 nike

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

main()
{
int *ptr,i;
ptr=(int*)malloc(sizeof(int));
printf("sizo of ptr is:%d",sizeof(ptr));

for(i=0;i<30;i++)
scanf("%d",ptr+i);

for(i=0;i<30;i++)
printf("%d",*(ptr+i));

getch();
}

这里ptr的大小是:4我的问题是,我想在 ptr 中只存储一个整数,但在这个程序中我可以存储超过 30 或 100 等,为什么它没有抛出错误?

最佳答案

Malloc 以系统页面大小(通常为 4096 字节)为单位分配堆空间,但它仅保留您所请求的大小供您使用。如果您的写入超出了malloced 内存,则可能会因分段违规而导致堆损坏或程序崩溃。

只有您请求的内存才能保证真正属于您使用。您请求的内存块后面的内存块可能是有效的,但正在被其他东西使用(例如 stdio 库缓冲区)或保留以供将来使用(例如,您的下一个 malloc调用)。

关于c - malloc实际分配了多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25666821/

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