这是labview的内存访问异常报错,也就是存在内存溢出。导致这个错误的操作往往是简单的控件之间数据流的传递,内存较大的数据流赋值给内存较小的控件时就会报错。
如上图是一个用CAN通信烧写程序的上位机(labview),每一次内存错误都会在我选择文件后出错,这个选择文件对应的子VI只有一个hex2bin.dll,因此可以确定是在将hex文件转换成bin文件时出错的。开始这里怀疑是hex2bin.c函数有数组越界,但是后面重新查了下源文件并没有什么问题。后面想起并非所有的h86文件在转化时都会报错,因此确定是h86文件有问题。在打开h86后发现多次相邻行之间有较大地址跳跃,可以确定就是这里导致的内存溢出。
因为hex2bin在确定bin文件大小时使用的时地址偏移,而我在hex2bin.vi中申请内存使用的时hex文件的字节数。一般情况不会两者的大小应该是相差不多的,但是当多次出现这种临行大地址跳跃时就会导致内存溢出,hex2bin.vi如下图所示。
最终只要保证VI和dll的内存计算方式统一,就会解决了。因此出现这种问题时不用犹豫一定是内存溢出,如果发现控件之间无可能出现内存溢出就去找找外部调用的库文件吧,比如我调用的dll。
相关文章: