我写了一个分配二维数组的函数,如下:template<class T>T** malloc_2dim_mat(int dim1, int dim2)
{
T** mat;
int i;
try{
mat = (T**)new T*[dim1];
}
catch(exception& ex){
cout << ex.what() << endl;
}
for(i=0;i<dim1;i++){
try{
mat[i] = (T*)new T[dim2];
}
catch(exception& ex){
cout << ex.what() << endl;
}
} return mat;
}在为一个二维double指针分配内存(大小为95×36个double数)时,为mat分配内存成功,但为mat[0]分配内存时引发了一个异常,经跟踪发现是operator new调用了若干层函数后最好调用API函数HeapAlloc时引发的。但是HeapAlloc刚一返回该异常就被处理了,不知是谁处理的,因为跟踪到HeapAlloc内部后只看到一堆汇编代码,看不明白。现在想搞清楚的是不是因为堆中的内存不够或者别的什么原因导致内存分配失败呢?查了一下API函数,好像没发现能返回堆中相关信息的函数(比如堆有多大,还有多少剩余空间,等等。也不知我对堆的理解对不对,呵呵),只有能返回堆中内存块信息的函数(比如HeapWalk)。不知我的想法对不对,请大侠指教!谢谢!
{
T** mat;
int i;
try{
mat = (T**)new T*[dim1];
}
catch(exception& ex){
cout << ex.what() << endl;
}
for(i=0;i<dim1;i++){
try{
mat[i] = (T*)new T[dim2];
}
catch(exception& ex){
cout << ex.what() << endl;
}
} return mat;
}在为一个二维double指针分配内存(大小为95×36个double数)时,为mat分配内存成功,但为mat[0]分配内存时引发了一个异常,经跟踪发现是operator new调用了若干层函数后最好调用API函数HeapAlloc时引发的。但是HeapAlloc刚一返回该异常就被处理了,不知是谁处理的,因为跟踪到HeapAlloc内部后只看到一堆汇编代码,看不明白。现在想搞清楚的是不是因为堆中的内存不够或者别的什么原因导致内存分配失败呢?查了一下API函数,好像没发现能返回堆中相关信息的函数(比如堆有多大,还有多少剩余空间,等等。也不知我对堆的理解对不对,呵呵),只有能返回堆中内存块信息的函数(比如HeapWalk)。不知我的想法对不对,请大侠指教!谢谢!
[email protected]
{
return dwExceptionCode == EXCEPTION_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH;
}template<class T>T** malloc_2dim_mat(int dim1, int dim2)
{
T** mat;
int i;
if((mat = (T**)new T*[dim1]) == NULL){
MessageBox(NULL, "Failed to allocate memory for 2 dimensional T matrix!", "Error!", MB_OK | MB_ICONWARNING | MB_DEFBUTTON1);
return NULL;
}
for(i=0;i<dim1;i++){
// SEH try block
__try{
mat[i] = (T*)new T[dim2];
}
__except(ExceptionFilter(GetExceptionCode(), GetExceptionInformation())){
cout << "Exceptions happened!\n";
}
// C++ try block
} return mat;
}