C++运行窗口时出现如下图标
请问是什么原因? 我的程序中有int p[2097152]; int s[2097152][21],这种变量,是不是变量占用空间太大了?我怎么解决?因为我确实需要那么多的数组空间。求教怎么解决这个问题才能使程序运行,在线等,加分
可以更具体点么,我该怎么替换int p[2097152]; int s[2097152][21],
追答替换的话
int *p = new int[2097152];
int (*s)[21] = new int[2097152][21];
在p跟s生存周期结束的时候也就是定义的大括号结束之前
delete[] p;
delete[] s;
编译这句话时出现,error C2440: '=' : cannot convert from 'int (*)[21]' to 'int *',什么意思
追答我刚刚写错了
二维数组使用
int (*s)[21] = new int[2097152][21];
delete 也改成 delete[]
我不用delete 释放内存有什么后果?
追答如果不释放,指针本身是创建在程序栈空间的,在生命周期结束时,p自身被释放,而它指向的堆空间没有被释放,不能再次被申请,也无法再释放,成为一块不可用的内存,也就是经常说的内存泄漏
我逻辑感觉没问题,是不是数组太大int p[2097152]的问题,怎么解决啊,能提供个解决方案么,我感觉我没有越界啊
追答好吧我试了一下,确实太大了,报一样的错
你为什么需要这么大的数组?
把一大堆数据放进去啊,难道分组放可以解决这个问题?我是C++新手不太懂
追答如果非要那么大的内存,那就
int p * = (int*)malloc(2097152*4);
int s ** = (int*)malloc(2097152*4);
for(int i=0;i<2097152;i++)
{
s[i] = (int*)malloc(21*4);
}
用法跟数组一样
把一大堆数据放进去这个想法,作为一个程序员一般都是要避免的,根据情况想出其他办法吧