new有大小限制吗?该如何处理
new有大小限制吗?
new有大小限制吗?有的话和什么有关系呢?
还有就是
for (int i = 0; i < 10; i++)
{
int* p = new int[10];
}
为什么每次都会new成功呢?第二次进入循环的时候,之前的p没有被delete,为什么不会出现重定义?
求指导啊~
------解决方案--------------------
指针也是变量 lz要注意区分int *p 跟 new int[10]实际上是两块不同的内存
------解决方案--------------------
空间还在,int*p是在栈上!
------解决方案--------------------
new关键字会算出需要挖的空间,然后去内存里找一块连续的空间返回首指针给你,如果挖不到一块合适的就会返回NULL。new返回失败与否和理论上和你申请的空间大小没关系,倒是和你的机器本身所剩余内存大小有关。
还有你的这段代码
for (int i = 0; i < 10; i++)
{
int* p = new int[10];
}
指针p是一个仅仅在for{}语句块内存在的局部变量存储在栈区,当一趟循环结束,那么当前的指针p也就消失了。但是这造成了很大的内存泄露,因为new是返回堆区的内存空间,不会被自动释放,但是指向这块堆区内存的指针没了,所以你无法使用new出的内存了,编译器也无法将其分配给其他的用户了。
new有大小限制吗?有的话和什么有关系呢?
还有就是
for (int i = 0; i < 10; i++)
{
int* p = new int[10];
}
为什么每次都会new成功呢?第二次进入循环的时候,之前的p没有被delete,为什么不会出现重定义?
求指导啊~
------解决方案--------------------
指针也是变量 lz要注意区分int *p 跟 new int[10]实际上是两块不同的内存
------解决方案--------------------
空间还在,int*p是在栈上!
------解决方案--------------------
new关键字会算出需要挖的空间,然后去内存里找一块连续的空间返回首指针给你,如果挖不到一块合适的就会返回NULL。new返回失败与否和理论上和你申请的空间大小没关系,倒是和你的机器本身所剩余内存大小有关。
还有你的这段代码
for (int i = 0; i < 10; i++)
{
int* p = new int[10];
}
指针p是一个仅仅在for{}语句块内存在的局部变量存储在栈区,当一趟循环结束,那么当前的指针p也就消失了。但是这造成了很大的内存泄露,因为new是返回堆区的内存空间,不会被自动释放,但是指向这块堆区内存的指针没了,所以你无法使用new出的内存了,编译器也无法将其分配给其他的用户了。