偶有一个给二维数组分配内存的函数,如下: 
  
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++) 
  if((mat[i] = (T*)new T[dim2]) == NULL){ 
   MessageBox(NULL, "Failed to allocate memory for 2 dimensional matrix!", " 
Error!", MB_OK | MB_ICONWARNING | MB_DEFBUTTON1); 
   return NULL; 
  } 
 return mat; 

  
在用它为一个double型二维数组分配内存(该double矩阵大小为95*36)时, 
在分配到第6行(即行下标为5)时VC调试器弹出如下的对话框: 
  
Unhandled exception in TrainModel.exe(KERNEL32.DLL): 0xE06D7363: Microsoft C++ Exception. 
  
但是同样是这个函数,在前边给其它指针分配内存时就没有问题。就是在运行 
到分配这个double二维数组的时候出问题,而且每次都是在分配到第6行的时候 
这样。在出错的地方一路跟踪下去发现在调用HeapAlloc(这个函数是kernel32.dll 
里的,并且被redirected到ntdll.dll里了。)函数时返回值为0(即NULL)。 
但是HeapAlloc这个函数再进去就是一堆汇编代码,看不懂啊。 
  
不知我这种方法是否对头啊。请大侠指教我该怎么办呢? 
  
多谢!!! 

解决方案 »

  1.   

    好像看不出以上函数有什么问题?两点建议,如下:
    1、用try{
    }
    catch(...)
    {
    }
    模式,在出错时取GetLastError()看看是什么错2、你将以上函数的double模式手工写一个,看看是不是模板的问题,我用模板不多,没有碰到过错误。
      

  2.   

    谢谢大侠!异常处理我不太懂。能否说的稍微详细一点呢?double型参数的函数也手工写过了。还是有这个问题,而且也是在分配到第6行时出现。应该不是模板带来的问题了,我想。
      

  3.   

    long ExceptionFilter(DWORD dwExceptionCode)
    {
       //在这里看看得到的dwExceptionCode是什么?
    }
    __try{
      call your function;
    }
    __except(ExceptionFilter(GetExceptionCode()))
    {
    }
       
      

  4.   

    在ExceptionFilter中看到dwExceptionCode是0xe06d7363,就是对话框“Unhandled exception in TrainModel.exe(KERNEL32.DLL): 0xE06D7363: Microsoft C++ Exception. ”中的那个地址。然后怎么办呢?请大侠进一步指点!谢谢!