访问权限冲突
- 一、引入:情景再现
- 二、出现问题的原因
- 三、解决问题的方法
- 四、问题解决
- 五、结果修正
一、引入:情景再现
想在结构体堆的数组中for循环读入已经有的一个数组
int main() {
int a[] = { 2,3,5,7,4,6,8,65,100,70,32,50,60 };
int num = sizeof(a) / sizeof(a[0]);
HP hp;
HeapInit(&hp);
HeapInitArray(&hp,&a,num);
//for (int i = 0; i < num; i++) {
// HeapPush(&hp,a[i]);
//}
HeapDestroy(&hp);
return 0;
}
结果出现了 报错:
引发了未经处理的异常:写入访问权限冲突。
php->a 是 0x1110112。
二、出现问题的原因
在C语言中,这种错误通常是由于以下原因之一引起的:
-
试图读取或写入 未分配给程序的内存区域。
-
试图读取或写入 已经释放的内存区域。
-
试图读取或写入 只读内存区域。
-
试图 访问受保护的系统资源或硬件设备。
三、解决问题的方法
为了解决这个问题,你可以尝试以下步骤:
-
检查你的程序中是否有任何 不正确的指针或数组访问,以及是否有未初始化的指针。
-
确保你的程序中没有 内存泄漏或重复释放 的情况。
-
检查你的程序是否尝试 访问只读内存区域。
-
确保你的程序没有试图 访问受保护的系统资源或硬件设备。
四、问题解决
大家是否看出来上图中的问题出在哪
这里犯了第一条错误:试图读取或写入 未分配给程序的内存区域。
我并未将realloc好的内存地址传给 php->a 数组,就尝试在未分配给程序的内存区域中写入数据
五、结果修正
成功 o( ̄▽ ̄)ブ