STM32调试特定函数出现Cannot access Memory
·
1 问题
程序每次执行到了特定函数的位置时,keil里面全速运行,一直出现Cannot access Memory
再后面就是进入硬件错误中断了 ;
执行到这个函数之前是正常的,说明这个函数出现了下面四种情况;
2 原因
访问了未初始化的指针。指针是一种特殊的变量类型,它存储内存地址。
如果指针没有初始化为有效的内存地址,则访问该指针所引用的内存会导致“CANNOT ACCESS MEMORY”错误。
确保在使用指针之前将其初始化为有效的内存地址。
访问越界的数组元素。如果程序尝试访问数组的越界元素,将导致“CANNOT ACCESS MEMORY”错误。
确保在访问数组元素之前检查数组索引是否在有效范围内。
内存泄漏。如果程序分配了内存但未释放,将导致内存泄漏。内存泄漏会导致程序使用越来越多的内存,
最终可能导致“CANNOT ACCESS MEMORY”错误。在使用完内存后,务必释放内存以避免此问题。
访问已释放的内存。如果程序释放了一块内存,但后续仍然尝试访问该内存,则可能导致
“CANNOT ACCESS MEMORY”错误。确保在释放内存后不再访问该内存
int buf[10];
cnt = 5;
///...其他地方发生改变 无意中cnt变成15了
buf[cnt]= 0xFF; //这里就会导致异常
char* str = &rx_buf;
char temp_buf[10];
//num是调用函数的返回值
strncpy(temp_buf, str, num);
str += (num + 1);
///....
//结果str再多次递增中越界了
3 总结
超出数组索引 指针访问越界 对空指针进行操作
都容易出现这个问题
如果是函数没有跑, 就出现Cannot access Memory
搜索到的结果大多是这种回复 可以参考一下
第一种情况是你的flash已经被写保护了,导致不能操作,
第二种就是boot引脚设置不对,导致不能识别到flash空间的地址
更多推荐

所有评论(0)