hard fault常见原因

1.栈堆内存溢出

堆和栈是ram的一部分,他们向相反的方向生长。

堆用于存储动态变量,像malloc()和calloc的变量。动态变量用过之后,不在使用的话必须手动释放,否则产生堆溢出。

全局变量和静态变量不在堆栈中。

#include<stdio.h>

int main()

{

    int *ptr = (int *)malloc(sizeof(int)*10000000);

}

栈用于存储函数里的局部变量,传递给函数的参数,函数的返回值。函数结束后内存自动恢复。

#include<stdio.h>

int main()

{

    int mat[100000][100000];

}

2.缓存溢出

缓存是临时数据存储。当存储数据大于原始分配数据,额外的数据溢出。导致数据泄露到其他缓存,冲突或重写。

#include <string.h>

int main(int argc,char *argv[])

{

char buff[5];

memcpy(buff,*argv,8);

}

3.未定义行为

#include<stdio.h>

int main()

{

    int *ptr = NULL;

    printf("%d",*ptr);

}