2 andy  zou Andy__Zou 于 2016.04.12 15:49 提问

内存位置异常,怎么查看内存位置,以及内存中的信息
    ipiv=(int*)malloc(sizeof(int)*count_1);
    A=(float*)malloc(sizeof(float)*b*count_1);
    Ta=(float*)malloc(sizeof(float)*count_1*count_1);
    invTa=(float*)malloc(sizeof(float)*count_1*count_1);
    det=(float*)malloc(sizeof(float)*1);
    eigRe=(float*)malloc(sizeof(float)*count_1);
    eigIm=(float*)malloc(sizeof(float)*count_1);
    //大小为uu count_1*numPixel;aa numPixel; vol numPixel;
    uu=(float*)malloc(sizeof(float)*count_1*numPixel);
    aa=(float*)malloc(sizeof(float)*numPixel);
    vol=(float*)malloc(sizeof(float)*numPixel);
    uMulInv=(float*)malloc(sizeof(float)*count_1*numPixel);
    //设备端申请空间;
    //int *d_ipiv;
    //float *d_A,*d_Ta,*d_invTa,*d_eigRe,*d_eigIm,*d_uu,*d_aa,*d_vol,*d_uMulInv;
    //float *d_det;
    cudaMalloc((void**)&d_ipiv,sizeof(int)*count_1);
    cudaMalloc((void**)&d_A,sizeof(float)*b*count_1);
    cudaMalloc((void**)&d_Ta,sizeof(float)*count_1*count_1);
    cudaMalloc((void**)&d_invTa,sizeof(float)*count_1*count_1);
    cudaMalloc((void**)&d_det,sizeof(float)*1);
    cudaMalloc((void**)&d_eigRe,sizeof(float)*count_1);
    cudaMalloc((void**)&d_eigIm,sizeof(float)*count_1);
    //大小为uu count_1*numPixel;aa numPixel; vol numPixel;
    cudaMalloc((void**)&d_uu,sizeof(float)*count_1*numPixel);
    cudaMalloc((void**)&d_aa,sizeof(float)*numPixel);
    cudaMalloc((void**)&d_vol,sizeof(float)*numPixel);
    cudaMalloc((void**)&d_uMulInv,sizeof(float)*count_1*numPixel);
    //计算A;
    caculateA<<<1,b>>>(d_OMEGA,d_A,d_First,b,count_1);
    /*cudaMemcpy(A,d_A,sizeof(float)*count_1*b,cudaMemcpyDeviceToHost);
    //显示A;
    char showA[64] = {0};
    sprintf(showA, "%f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n", A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7],A[8]);
    ::MessageBox(NULL, showA,"showA",  MB_OK);*/
    //求ATA;
    stat=cublasSgemm(handler,CUBLAS_OP_T,CUBLAS_OP_N,count_1,count_1,b,
        &al,d_A,b,d_A,b,&bet,d_Ta,count_1); 
    cudaMemcpy(d_invTa,d_Ta,sizeof(float)*count_1*count_1,cudaMemcpyDeviceToDevice); //d_Ta复制给d_invTa,因为稍后的计算会覆盖;

    /*//显示ATA;
    cudaMemcpy(Ta,d_Ta,sizeof(float)*count_1*count_1,cudaMemcpyDeviceToHost);
    char showATA[64] = {0};
    sprintf(showATA, "%f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n", Ta[0],Ta[1],Ta[2],Ta[3],Ta[4],Ta[5],Ta[6],Ta[7],Ta[8]);
    ::MessageBox(NULL, showATA,"showATA",  MB_OK);*/
    //求特征值;
    culaInitialize();
    culaDeviceSgeev('N','N',count_1,d_Ta,count_1,d_eigRe,d_eigIm,NULL,count_1,NULL,count_1); //求A*A转置特征值;
    //求行列式;
    cudaMemcpy(eigRe,d_eigRe,sizeof(float)*count_1,cudaMemcpyDeviceToHost);
    cudaMemcpy(eigIm,d_eigIm,sizeof(float)*count_1,cudaMemcpyDeviceToHost);
    det[0]=detValue(eigRe,eigIm,count_1);
    /*
    //显示行列式;
    char showDet[64] = {0};
    sprintf(showDet, "%f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n", det[0],det[1],det[2],det[3],det[4],det[5],det[6],det[7],det[8]);
    ::MessageBox(NULL, showDet,"showDet",  MB_OK);*/
    //求逆矩阵;
    culaDeviceSgetrf(count_1,count_1,(float *)d_invTa,count_1,(int *)d_ipiv);  //LU分解;
    culaDeviceSgetri(count_1,(float *)d_invTa,count_1,(int *)d_ipiv);          //求逆;
    /*
    //显示逆矩阵;
    cudaMemcpy(invTa,d_invTa,sizeof(float)*count_1*count_1,cudaMemcpyDeviceToHost);
    char showInv[64] = {0};
    sprintf(showInv, "%f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n", invTa[0],invTa[1],invTa[2],invTa[3],invTa[4],invTa[5],invTa[6],invTa[7],invTa[8]);
    ::MessageBox(NULL, showInv,"showInv",  MB_OK);*/
    //求体积最大;
    e3=0;
    caculateUu<<<dimGrid,dimBlock>>>(d_subData,d_A,d_uu,b,w,numPixel,count_1);  //求uu;
    //显示UU;
    cudaMemcpy(uu,d_uu,sizeof(float)*count_1*numPixel,cudaMemcpyDeviceToHost);
    char showUU[64] = {0};
    sprintf(showUU, "%f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n", uu[0],uu[1],uu[2],uu[300],uu[400],uu[500],uu[600],uu[700],uu[800]);
    ::MessageBox(NULL, showUU,"showUU",  MB_OK);

    caculateUinv<<<dimGrid,dimBlock>>>(d_uMulInv,d_invTa,d_uu,w,count_1,numPixel); //求uMulInv;
    //显示Uinv;
    cudaMemcpy(uMulInv,d_uMulInv,sizeof(float)*count_1*numPixel,cudaMemcpyDeviceToHost);
    char showUinv[64] = {0};
    sprintf(showUinv, "%f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n", uMulInv[0],uMulInv[1],uMulInv[2],uMulInv[300],uMulInv[400],uMulInv[500],uMulInv[600],uMulInv[700],uMulInv[800]);
    ::MessageBox(NULL, showUinv,"showUinv",  MB_OK);

    caculateAa<<<dimGrid,dimBlock>>>(d_uu,d_aa,d_uMulInv,w,count_1,numPixel);//求aa;
    //显示Aa;
    cudaMemcpy(aa,d_aa,sizeof(float)*numPixel,cudaMemcpyDeviceToHost);
    char showAa[64] = {0};
    sprintf(showAa, "%f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n", aa[0],aa[1],aa[2],aa[300],aa[400],aa[500],aa[600],aa[700],aa[800]);
    ::MessageBox(NULL, showAa,"showAa",  MB_OK);

    caculateVol<<<dimGrid,dimBlock>>>(d_aa,d_vol,d_tempMt,w,det); //求体积;
    //显示Vol;
    cudaMemcpy(vol,d_vol,sizeof(float)*numPixel,cudaMemcpyDeviceToHost);
    char showVol[64] = {0};
    sprintf(showVol, "%f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n %f\n",vol[0],vol[1],vol[2],vol[300],vol[400],vol[500],vol[600],vol[700],vol[800]);
    ::MessageBox(NULL, showVol,"showVol",  MB_OK);

    stat=cublasIsamax(handler,numPixel,d_vol,1,&e3);
    //e3=e3-1;
    //显示部分;
    char E3[8] = {0};
    sprintf( E3, "%d\n ",e3);
    ::MessageBox(NULL,E3,"Next Duanyuan",  MB_OK);
    duanyuanInd[count_duanyuan]=e3;
    vtKernel<<<1,b>>>(d_data,d_Vt,numPixel,b,e3); 
    omegaKernel<<<1,b>>>(d_Vt,d_OMEGA,b,count_duanyuan);   //端元读入OMEGA中;

kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f928 处的 cudaError_enum。
“kernelTEST1.exe”: 已加载“C:\Windows\System32\uxtheme.dll”
“kernelTEST1.exe”: 已加载“C:\Windows\System32\dwmapi.dll”
“kernelTEST1.exe”: 已加载“C:\Windows\System32\cryptbase.dll”
“kernelTEST1.exe”: 已加载“F:\Program Files\Dict\6.3.68.1111\WordStrokeHelper32.dll”
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019fa18 处的 cudaError_enum。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019facc 处的 cudalib::CudaRuntimeException。
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019f940 处的 boost::exception_detail::clone_implcula::InfoException
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019fab4 处的 boost::exception_detail::clone_implcula::InfoException
kernelTEST1.exe 中的 0x7544812f 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0019fa34 处的 boost::exception_detail::clone_implcula::InfoException
程序“[5796] kernelTEST1.exe: 本机”已退出,返回值为 0 (0x0)。

2个回答

caozhy
caozhy   Ds   Rxr 2016.04.12 17:50

用VS调试你的程序,在报错的地方下断点,打开内存、反汇编、调用堆栈等窗口可以查看分析。

Andy__Zou
Andy__Zou 不报错,只是warming~ 但是说可能出现可能的异常
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.12 15:53

变量在内存中的位置
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!