求大神帮忙:0x00000000 处有未经处理的异常: 0xC0000005: 在位置 0x0000000000000000 发生访问冲突

huangxqueen 2013-09-24 09:54:41
程序的 编译没有问题。。但是 出错误。。



环境 是 win8 64bit 系统。。。

程序调用了 zgemm 这个函数。。是 intel mkl 里面的函数。。实现矩阵相乘
https://publib.boulder.ibm.com/infocenter/clresctr/vxrx/index.jsp?topic=%2Fcom.ibm.cluster.essl.v5r2.essl100.doc%2Fam5gr_hsgemm.htm

输入的参数都是由主函数传过来的。。已经 通过 new 这种方式定义过了的。。
void MatMultiply( MKL_Complex16* C, MKL_Complex16* opA, MKL_Complex16* opB, __int64 *a, __int64 *b, __int64* c,
MKL_Complex16* alpha/*=NULL*/, MKL_Complex16* beta/*=NULL*/ )
{
//C := alpha*op(A)*op(B) + beta*C,
// op(A) size(l*m) op(B)size(m*n) C size(l*n)
// a =l b =m c=n
MKL_Complex16 cAlpha = {1,0}, cBeta = {0,0};
if(!alpha){
alpha = &cAlpha;
}
if(!beta){
beta = &cBeta;
}
zgemm("n","n",a,c,b,alpha,opA,a,opB,b,beta,C,a); // 就这一句 有问题!!!!!!
//zgemm("n","n",c,a,b,alpha,opB,c,opA,b,beta,C,c);
}


然后反汇编就弹出来一堆:
0000000000000000 ?? ???
0000000000000001 ?? ???
0000000000000002 ?? ???
0000000000000003 ?? ???
0000000000000004 ?? ???
0000000000000005 ?? ???
0000000000000006 ?? ???
0000000000000007 ?? ???
0000000000000008 ?? ???
0000000000000009 ?? ???
000000000000000A ?? ???
000000000000000B ?? ???
000000000000000C ?? ???
000000000000000D ?? ???
000000000000000E ?? ???
000000000000000F ?? ???
0000000000000010 ?? ???
0000000000000011 ?? ???
0000000000000012 ?? ???
0000000000000013 ?? ???
0000000000000014 ?? ???
0000000000000015 ?? ???
0000000000000016 ?? ???
0000000000000017 ?? ???
0000000000000018 ?? ???
0000000000000019 ?? ???


求问题原因?!!!没有找到空指针项。。。
或者怎么看是不是空指针??
...全文
2438 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
modyaj 2013-09-25
  • 打赏
  • 举报
回复
引用 5 楼 huangxqueen 的回复:
[quote=引用 1 楼 modyaj 的回复:] 第一想到的就是空指针 既然没有空指针 既然没有空指针 那看看每个参数指向的空间是不是足够使用啊 这么看 着实看不出啥来。。。
谢谢! 想请问一下 怎么看 参数的指向空间呢? 因为 zgemm 函数要求 输入的 参数 是 const long long 形式的。。跟64 位 这个 有关系么? 在网上 搜的时候 都只有 “在位置0x00000000” 而我这里 是“0x0000000000000000” 是不是跟这个有关系? 真心谢谢了!望指教!![/quote] 这个还得你自己看看你的数组边界 保证函数调用写入数据的时候 确实存在内存
向立天 2013-09-25
  • 打赏
  • 举报
回复
引用 10 楼 huangxqueen 的回复:
[quote=引用 8 楼 xianglitian 的回复:] 这种问题自己单步调试检查一下数据变化
因为 那个 函数 zgemm 是封装在 库里面的。。所以没有办法 到内部去一步一步的 调试。。 还是说 在这一步之前看那些 数据? 看数据的话 如何判断出错误 呢? 真心谢谢!![/quote]你这个显然是指针异常 成熟库函数理论上是不会出现问题的 所以肯定是你代码的问题 看指针分配和数组边界的位置
zhuben775 2013-09-25
  • 打赏
  • 举报
回复
你如果确定是调用库函数那一行出错,就看下你给库函数传参是否有错,再看看这个函数是否需要初始化等操作
huangxqueen 2013-09-25
  • 打赏
  • 举报
回复
引用 8 楼 xianglitian 的回复:
这种问题自己单步调试检查一下数据变化
因为 那个 函数 zgemm 是封装在 库里面的。。所以没有办法 到内部去一步一步的 调试。。 还是说 在这一步之前看那些 数据? 看数据的话 如何判断出错误 呢? 真心谢谢!!
huangxqueen 2013-09-25
  • 打赏
  • 举报
回复
引用 4 楼 oyljerry 的回复:
看上去还是指针或者数组越界,检查一下参数等是否符合要求
参数 如果不符合要求貌似在编译的时候 就指出来了。。还因为这个改了好久。。但是编译通过的 时候有警告 说 __int64 改成 int 时 可能会数据丢失。。但是 由于 __int64 定义的都是 每一维的大小。。最大 512.。所以 就没管。。想问一下 数组越界 是什么意思? 该怎么检查 或者操作呢? 谢谢!!望指教!!
向立天 2013-09-25
  • 打赏
  • 举报
回复
这种问题自己单步调试检查一下数据变化
huangxqueen 2013-09-25
  • 打赏
  • 举报
回复
引用 3 楼 hdt 的回复:
它的matrix是用什么形式写的,怎么也感觉不能用一维数组表示
matrix 这个比较 奇葩。。是 intel mkl 这个库 里面定义的。。叫做 MKL_Complex16 定义的时候 是: MKL_Complex16 *A=new MKL_Complex16 [kk*ss*ii*jj]; 应该是一维的数组吧。。。就是把几维的全部大小乘积 作为整个的大小 原来 用的是32位 的intel 的库 编译是通过的。。里面的额参数 是 const int 但是 由于数据太大 换到 64位系统编译 然后用的是 64位的库。。结果就编译不通过。。
huangxqueen 2013-09-25
  • 打赏
  • 举报
回复
引用 2 楼 healer_kx 的回复:
嗯~。就是代码处理指针不对。
谢谢 回答! 还想请问一下 具体是指针的 什么原因 或者 有可能是哪方面不对呢? 望指教!谢谢!
huangxqueen 2013-09-25
  • 打赏
  • 举报
回复
引用 1 楼 modyaj 的回复:
第一想到的就是空指针 既然没有空指针 既然没有空指针 那看看每个参数指向的空间是不是足够使用啊 这么看 着实看不出啥来。。。
谢谢! 想请问一下 怎么看 参数的指向空间呢? 因为 zgemm 函数要求 输入的 参数 是 const long long 形式的。。跟64 位 这个 有关系么? 在网上 搜的时候 都只有 “在位置0x00000000” 而我这里 是“0x0000000000000000” 是不是跟这个有关系? 真心谢谢了!望指教!!
oyljerry 2013-09-24
  • 打赏
  • 举报
回复
看上去还是指针或者数组越界,检查一下参数等是否符合要求
真相重于对错 2013-09-24
  • 打赏
  • 举报
回复
它的matrix是用什么形式写的,怎么也感觉不能用一维数组表示
healer_kx 2013-09-24
  • 打赏
  • 举报
回复
嗯~。就是代码处理指针不对。
modyaj 2013-09-24
  • 打赏
  • 举报
回复
第一想到的就是空指针 既然没有空指针 既然没有空指针 那看看每个参数指向的空间是不是足够使用啊 这么看 着实看不出啥来。。。
申明一下,TPFanControl是原大神写的.因长期找不到绿色版,所以我只是绿化了一下.方便像我这种喜欢绿色软件的朋友. 人格担保: 绿色版完全从安装版绿化而来,决不添加任何流氓插件等. 解压缩后,可以放入任何文件夹内,然后运行!)Green.bat一下,完成绿化,如果怕的话,可以手动将TVicPort.sys拷入c:\windows\system32\drivers完成绿化 之后就可以双击TPFanControl.exe运行了,其中TPFanControl-0.62.exe是0.62版的,经MD5检查,0.62版和0.63版只有这一个文件有区别. ini配置文件是我自己重新定义的,大家可以自行修改,搜索MenuLabelSM1=Smart Mode 1,然后下面的温度自己调. 为了方便大家阅读,把配置的内容贴在下面了,配合浅显易懂的中文翻译,纯手工翻译!!非直译,其中(* *)中间的注释是我本人的注释,非翻译. // !!! Temp of lowest Level > 79 -> switch to Fahrenheit !!! see below // 最低一级的温度值如果>79的话,则温度自动识别为华氏度. // ATTENTION: example temp values are for my T61, especially //BluetoothEDR=1, SensorName5=no5, IgnoreSensors=no5 too // temp levels 10 degrees centgrade higher than in T4x, R5x, // change for your purposes. // 注意,下面的温度设置是以我的T61为例,特别是蓝牙EDR设置为1,第五个传感器名称改为no5,并且忽略这个传感器的温度显示.在T4X,R5X机器上,温度设置要高个10°,总之以你自己实测的效果来调试. // advice for programmers: TPFanControl must acquire mutex named // "Access_Thinkpad_EC" to get access to embedded controller // 建议: TPFanControl必须获得"Access_Thinkpad_EC"才能得到温度值. // with Active=3 & ManFanSpeed=0 & ManModeExit=78 you can have a nice // quiet time until temps reaches 78 deg. centigrade :-)) // 当使用手动模式(Active=3),风速为0(ManFanSpeed=0),并且将"手动切换到智能的温度阀值"设定为78°(ManModeExit=78)的话,你的电脑将会异常安静,除非温度攀升到78°. // ----------------------------------------------------------------- // ----------------------------------------------------------------- // "Active=0" program just reads config. 程序仅读取配置 // "Active=1" allow program to modify fan. 允许程序修改风速 // "Active=2" program will come up in smart mode. 程序以智能模式启动 // "Active=3" program will come up in manual mode. 程序以手动模式启动 Active=2 // ----------------------------------------------------------------- // manual fan speed at program start // 程序启动时,手动风速的初始值.(*我发现我的T61上,64风速是最快的*) ManFanSpeed=64 // ----------------------------------------------------------------- // Program exits manual mode and switches to smart mode with last chosen // profile, if this temp (degrees Centigrade or Fahrenheit) is achieved. // default= 80 degrees Centigrade / 176 degrees Fahrenheit. // 当温度达到该值时,程序将自动退出手动模式,并切换到之前启用过的智能模式. ManModeExit=78 //ManModeExit=172 // with Fahrenheit // ----------------------------------------------------------------- // Window stays on Top if StayOnTop=1, normal behavior =0 // 窗口是否一直前置显示,1为前置,默认为0,不前置. StayOnTop=0 // ----------------------------------------------------------------- // Set to 1 for slim widget // 1为窗口细长型显示,0为窗口粗矮型显示,显示的信息量相应的多一些. SlimDialog=1 // ----------------------------------------------------------------- // set to 1 for bluetooth with enhanced data rate (i.e. T61, // X61 for T4x, R5x set BluetoothEDR=0 ) // 设置为1时增强蓝牙的传输速率,例如T61,X61.但是对于T4x,R5x,请设置为0 BluetoothEDR=1 // ----------------------------------------------------------------- // Windows Priority of Process (0-5, normal=2), increase if fancontrol has // big delays in response while other processes consume performance. // 程序的优先级,可以设定为0-5,正常是2,如果其他程序大量消耗系统资源导致TPFanControl有较大的延迟,请把这个数值加大. ProcessPriority=5 // ----------------------------------------------------------------- // Show no icon ballons: NoBallons=1, show icon ballons: NoBallons=0 // 禁止托盘处的程序图标显示提示信息时,设为1,反之设为0. NoBallons=1 // ----------------------------------------------------------------- // check temperatures every x seconds (default 5) // 每隔x秒检查温度,默认是5. Cycle=1 // ----------------------------------------------------------------- // For Thinkpads A2x,T2x,X2x set NoExtSensor=1 to exclude reading // of extended sensors to prevent program errors. Attention 570(E) // is NOT compatible. Fan speed is not available on all models. // 对于Thinkpad A2x,T2x,X2x,设为1可以避免因读取不存在的温度传感器而导致程序出错.注意,570(E)是不兼容的.所有的机型上都无法设定风速. NoExtSensor=0 // ----------------------------------------------------------------- // Minimize to systray immediately when starting // 设定为1时,当程序启动后,立即最小化到托盘. StartMinimized=1 // ----------------------------------------------------------------- // check icon of tpfcicon.exe (optional) every x seconds (default 1) // 每x秒检查tpfcicon.exe的图标(可选,默认是1秒). IconCycle=1 // ----------------------------------------------------------------- // Show new icon with max. temperature / sensor name // 显示最高的温度和芯片的名称 ShowTempIcon=1 // ----------------------------------------------------------------- // Save the icon by a start delay of the program/service of // "SecStartDelay" (sec.) within "SecWinUptime" (sec.) after (re)boot // Delete slashes '//' at next 3 parameters. // 在启动或重启后,设定程序的延时启动时间,将下面的'//'删掉就能启用(*这个没啥用,我不弄的*) //SecWinUptime=120 //"SecWinUptime" (sec.) after (re)boot //SecStartDelay=60 //start delay of the program (sec.) //NoWaitMessage=0 //set to 1 to avoid sleep message //ReIcCycle=600 //rebuild TempIcon every xxx secs. // ----------------------------------------------------------------- // Temperature thresholds for turning the taskbar icon // yellow orange red (Smart and Manual mode only and // only together with MinimizeToTray=1) // 对于不同的温度,系统托盘所显示的颜色,黄,橙,红.仅在智能和手动模式下生效,并且MinimizeToTray=1 IconLevels=50 60 65 // Fahrenheit: IconLevels=122 140 158 // ----------------------------------------------------------------- // Beep frequency and duration (in ms) for successful // fan state changes. (Set either or both to zero to // disable) // 当成功转换风扇状态时,蜂鸣器的频率和时长(毫秒),任何一个值设定为0时,禁止蜂鸣. FanBeep=0 0 // -------------------------------------------------------- // If this max number of consecutive EC read errors occur // program will switch fan back to bios mode and exit // 当读取温度传感器的错误次数达到改设定值后,程序将自动切换到bios控制并退出. MaxReadErrors= 10 // -------------------------------------------------------- // Log2File=1 enables, Log2File=0 disables writing to TPFanControl.log // Start program with admin rights. // 允许或禁止写入日志文件,这个需要管理员权限 Log2File=0 // -------------------------------------------------------- // Log2csv=1 enables, Log2csv=0 disables // writing to TPFanControl_csv.txt renamed to // TPFanControl_last_csv.txt after restart of TPFanControl // rename to *.csv for use with excel // Start program with admin rights. // 设定为1时,允许日志写入TPFanControl_csv.txt,程序重启后,自动更名为TPFanControl_last_csv.txt.将扩展名改成.csv时,可以用excel打开.(*这个需要在文件夹选项中,将"隐藏已知类型的扩展名"后面的勾去掉才能显示并更改扩展名*) Log2csv=0 // -------------------------------------------------------- // List (separated by comma) of sensors to ignore when // determining the max. temperature. (Use lower case, // e.g "IgnoreSensors=pci,aps") // 判断最高温度时,哪些芯片是不受监控的(相当于黑名单,多个名称用逗号隔开,并用小写字母). IgnoreSensors=cpu,aps,crd,bat,bus,pci,pwr // (*我的T61有显卡门,所以只监控gpu的温度,除了gpu,其他所有的芯片都列上去了.大家可以把cpu从黑名单中删除*) // --------------------------------------------------------- // List of new 3 letter sensor names, delete leading // slashes to activate. Don't use capital letters for readability // of temp icon. // 写3个新的字母来重新命名芯片的名称,把'//'删除就能启用.别用大写字母 //SensorName1=cpu //SensorName2=aps //SensorName3=pcm //SensorName4=gpu //SensorName5=no5 //SensorName6=x7d //SensorName7=bat //SensorName8=x7f //SensorName9=bus //SensorName10=pci //SensorName11=pwr //SensorName12=xc3 // --------------------------------------------------------- // calculating Highest Temp with: // temperature of sensor no. = real temp minus SensorOffsetno. // Default SensorOffset1-12=0 , Capital O in SensorOffset, // to activate delete slashes '//', // Negative SensorOffsetno. values increase temperature values. // 重新计算最高温度,传感器温度=实测温度-偏移量,默认的偏移量都为0,删除'//'可以启用计算.当偏移量为负数时,则增大温度值 //SensorOffset1=20 //SensorOffset2=20 //SensorOffset3=0 //SensorOffset4=2 //SensorOffset5=1 //SensorOffset6=5 //SensorOffset7=5 //SensorOffset8=4 //SensorOffset9=3 //SensorOffset10=2 //SensorOffset11=1 //SensorOffset12=5 // ----------------------------------------------------------------- // set to 1 to show calculated temps for sensors // 设定为1时,显示计算后的温度值 ShowBiasedTemps=1 // ----------------------------------------------------------------- // Show all/active sensors at start up. all=1 only active=0 // 在启动时,显示所有/激活的传感器温度值,1为所有,0为激活的 ShowAll=0 // -------------------------------------------------------- // temperature levels 'Level=' with associated fan levels // (for the fan to come back, temperature must fall // down to previous level). There may be more or // less levels in this list. The first one should // have a fan speed of zero and is the "turn off" // temperature. // Fan speed of 64 is extreme and may be an *unsupported* // and *damaging* mode. A fan speed of 128 setting is // not really a fan speed in itself but will instead switch // fan control to BIOS mode (0x80). The idea of this // is to let the program get out of the way and let the // BIOS handle extremes.(and then switch back to smart if // the temperature is okay again) // Temp of lowest Level (commonly set to fan speed zero) of profile // "Smart Mode 1" will switch from Celsius to Fahrenheit if set higher // than 79 degrees. Temps of higher levels have no influence on F/C. // // profile "Smart Mode 1" // change values and number of items for your needs // Celsius: // Fahrenheit: MenuLabelSM1=Smart Mode 1/ Label for Icon Menu, must be terminated by '/' Level=30 0 // Level=140 0 Level=40 1 // Level=150 1 Level=45 4 // Level=165 3 Level=49 7 // Level=175 7 Level=52 64 // Level=195 64 // (*这些是我的温度设定,分别设定了30°,40°,45°,49°,52°,可以自己改*) // optional 2nd profile "Smart Mode 2", switched by icon menue // change values and number of items for your needs // to deactivate, insert leading '//' into following lines MenuLabelSM2=Smart Mode 2/ Label for Icon Menu, must be terminated by '/' // (*智能模式2下的设定*) Level2=30 0 // Level=140 0 Level2=40 1 // Level=150 1 Level2=45 4 // Level=165 3 Level2=49 7 // Level=175 7 Level2=52 64 // Level=195 64 // ----------------------------------------------------------------- // IconColorFan=1 digital Icon will turn green while fan is running. // 设定为1时,当风扇转的时候,图标为绿色 IconColorFan=1 // ----------------------------------------------------------------- // Lev64Norm=1 : Fan level 64 acts as normal level with hysteresis, // fan will run till next lower temp step is reached (no pulsing fan). // If set to zero fan level 64 acts as emergency level without hysteresis, // fan will run till level64 temp is reached again (pulsing fan can happen). // 设定为1时,最高风速有延迟效应,也就是说,当温度下降到最高档温度值以下时,风速仍旧为最高,直到继续下降到下一档温度时,才调低到下一档风速.如果设置为0,则一旦下降到最高档温度以下时,就立马降低到下一档风速,直到温度再次超过最高档温度值时再调高到最高风速. Lev64Norm=1

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧