沉舟千帆 2022-04-29 10:15 采纳率: 100%
浏览 43
已结题

为什么这样输出的n为负值呢?是溢出了吗

int main(){
        int *p;
        long n = 1;
        while (p!=NULL)
        {
        n=n+1000000000;
        p = (int *)malloc(sizeof(int)*n);
    
        }
        if(!p){
                        printf("%ld\n",n);        
                        printf("hello");
                    }
        
    return 1;    
}



最后得到n为负值,是因为n达到了长整型能到达的最大值时,仍有内存空间可以分配吗?
但为什么把n=n+10000000000去掉一个之后就能得到n为正值
(都输出了hello)
初学数据结构,感谢大家
  • 写回答

3条回答 默认 最新

  • 不会长胖的斜杠 后端领域新星创作者 2022-04-29 10:32
    关注

    long的范围是 -2147483648~2147483647,数据过大,只是显示会有问题,但是内存没有占用过大,因为一个long也就4字节

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    沉舟千帆 2022-04-29 23:56

    谢谢您!所以是说,n=n+1000000000的时候,可能n变化的太快了,超过了long能显示的范围之后内存才占满;n=n+1的时候,变化慢一点,还没到long能显示的最大值,内存就满了。可以这样理解吗?

    回复
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 创建了问题 4月29日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部