读书人

C++内存泄漏有关问题

发布时间: 2012-03-26 15:46:56 作者: rapoo

C++内存泄漏问题

C/C++ code
#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>using namespace std;int main(){    unsigned int MAX = (unsigned int)(1 << 31);    unsigned int size = MAX >> 5;    int *bit1 = (int *)malloc(size + 1);    if(bit1 == NULL){        cerr<<"Malloc error!"<<endl;        exit(1);    }        memset(bit1, 0, size);        cout<<size<<"\t"<<bit1[size]<<endl;    return 0;}

不是在malloc函数里面已经分配了size+1个int空间吗?怎么引用bit1[size]出错了?出的错是内存泄漏。

[解决办法]
size*sizeof(int) + 1
[解决办法]
C/C++ code
int *bit1 = (int *)malloc(size + 1); //bit1类型是int*,取bit1[size]时实际上取的是第(size - 1) * sizeof(int)个字节开始的数据。当然越界了。
[解决办法]
1:楼主可以回顾一下malloc用法,malloc申请内存是需要显示指出总字节数的(char可以省略)
2:new比较适合楼主。
[解决办法]
我觉得你可以调用bit1[size/4];
[解决办法]
int *p;
如果用p[N]取值, 则指向的是P后面第4*N字节的位置
[解决办法]
bit1[size]肯定越界了,
而且没有free

读书人网 >C++

热点推荐