为什么这样输出的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)
初学数据结构,感谢大家

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

这里将 long n = 1; 改成 long long n = 1;

数据越界,不代表把所有的内存都占用了。