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

为什么这样输出的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 18:32
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月8日
  • 已采纳回答 4月30日
  • 创建了问题 4月29日