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 总结
超出数组索引 指针访问越界 对空指针进行操作
都容易出现这个问题文章来源:https://www.toymoban.com/news/detail-571357.html
如果是函数没有跑, 就出现Cannot access Memory
搜索到的结果大多是这种回复 可以参考一下文章来源地址https://www.toymoban.com/news/detail-571357.html
第一种情况是你的flash已经被写保护了,导致不能操作,
第二种就是boot引脚设置不对,导致不能识别到flash空间的地址
到了这里,关于STM32调试特定函数出现Cannot access Memory的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!