new有大小限制吗?该如何处理

new有大小限制吗?
new有大小限制吗?有的话和什么有关系呢?

还有就是

for (int i = 0; i < 10; i++)
{
int* p = new int[10];
}
为什么每次都会new成功呢?第二次进入循环的时候,之前的p没有被delete,为什么不会出现重定义?

求指导啊~

------解决方案--------------------
引用:
引用:引用:我new的时候,有时new的太大,系统崩溃,但是不知道这个上限是多大,和什么有关系?
还不懂? 在for循环声明变量,生存周期在下一次for循环开始时就结束了。包括在for循环里new的指针吗?


指针也是变量 lz要注意区分int *p 跟 new int[10]实际上是两块不同的内存
------解决方案--------------------
引用:
引用:引用:我new的时候,有时new的太大,系统崩溃,但是不知道这个上限是多大,和什么有关系?
还不懂? 在for循环声明变量,生存周期在下一次for循环开始时就结束了。包括在for循环里new的指针吗?

空间还在,int*p是在栈上!
------解决方案--------------------
new关键字会算出需要挖的空间,然后去内存里找一块连续的空间返回首指针给你,如果挖不到一块合适的就会返回NULL。new返回失败与否和理论上和你申请的空间大小没关系,倒是和你的机器本身所剩余内存大小有关。

还有你的这段代码
for (int i = 0; i < 10; i++)
{
int* p = new int[10];
}
指针p是一个仅仅在for{}语句块内存在的局部变量存储在栈区,当一趟循环结束,那么当前的指针p也就消失了。但是这造成了很大的内存泄露,因为new是返回堆区的内存空间,不会被自动释放,但是指向这块堆区内存的指针没了,所以你无法使用new出的内存了,编译器也无法将其分配给其他的用户了。