MDK5出现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空间的地址
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐