1
int *ptr = NULL;*ptr = 10; // 空指针访问,可能导致崩溃
if (ptr != NULL) {
*ptr = 10;
}
2
int *ptr;*ptr = 10; // 野指针访问,指向未知内存
int *ptr = NULL;
3
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
ptr += 6; // 超出数组边界
*ptr = 10; // 可能导致崩溃
for (int i = 0; i < 5; i++) {
*(ptr + i) = i;
}
4
int *ptr = (int *)malloc(10 * sizeof(int)); // 没有释放分配的内存
free(ptr);
ptr = NULL; // 释放后将指针置为NULL,避免悬空指针
5
int *ptr = (int *)malloc(10 * sizeof(int));
free(ptr); // 释放内存
*ptr = 10; // 悬空指针访问,可能导致崩溃
free(ptr);
ptr = NULL;
6
char *ptr = (char *)malloc(sizeof(int));
*ptr = 0xFF; // 操作4字节的int时,只改变了1字节
int *ptr = (int *)malloc(sizeof(int));
*ptr = 0xFFFFFFFF; // 确保类型匹配
7
int *shared_ptr;
// 任务1修改
*shared_ptr = 10;
// 任务2同时访问
int val = *shared_ptr; // 数据不一致
// 任务1
osMutexWait(mutex_id, osWaitForever);
*shared_ptr = 10;
osMutexRelease(mutex_id);
// 任务2
osMutexWait(mutex_id, osWaitForever);
int val = *shared_ptr;
osMutexRelease(mutex_id);
8
char data[10];
int *ptr = (int *)&data[1]; // 可能未按4字节对齐
*ptr = 0x12345678; // 引发访问错误
int *ptr = (int *)((uintptr_t)(data + 3) & ~0x3); // 强制对齐