偶有一个给二维数组分配内存的函数,如下:
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、用try{
}
catch(...)
{
}
模式,在出错时取GetLastError()看看是什么错2、你将以上函数的double模式手工写一个,看看是不是模板的问题,我用模板不多,没有碰到过错误。
{
//在这里看看得到的dwExceptionCode是什么?
}
__try{
call your function;
}
__except(ExceptionFilter(GetExceptionCode()))
{
}