为什么权限访问冲突,大佬们看看
#include <stdio.h>void f(int *p1, int n)
{
int *p, temp, *i, *j, m;
m = (n - 1) / 2;
i = p1;
j = p1 - 1 + n;
p = p1 + m;
for (;i <= (p+1);i++, j--)
{
temp = *i; //引发了异常: 读取访问权限冲突。i 是 0x4。
*j = *i;
*j = temp;
}
}
void main()
{
int m, arr = {4,8,9,7,6,4,26,9,5,2};
int *p;
m = 0;
p = arr;
f(p, 10);
for (m = 0;m < 10;m++)
{
printf("%d ", arr);
}
} 本帖最后由 风过无痕1989 于 2021-1-26 19:43 编辑
变量 i 既作为循环变量,就不要再用作为其他变量,将 它改为其他的变量即可
由于不知道你的程序想要达到什么目的,无法帮你修改程序
#include <stdio.h>
void f(int *p1, int n)
{
int i, *p, temp, *j, *k, m;
m = (n - 1) / 2;
k = p1;
j = p1 - 1 + n;
p = p1 + m;
for (;i <= (p+1);i++)
{
temp = *k;
*j = *k;
*j = temp;
}
}
void main()
{
int m, arr = {4,8,9,7,6,4,26,9,5,2};
int *p;
m = 0;
p = arr;
f(p, 10);
for (m = 0;m < 10;m++)
{
printf("%d ", arr);
}
} 问题应该不在你标注的那一行,而应该在下面两行
*i和*j是取地址对应的值,只能做赋值运算符的右值,不能做赋值运算符的左值
具体如何修改,我看看,一会儿再给你修改结果 楼上都没答道点子上啊, 这里问题是 main 里, 给p赋值的时候, p是一个指针啊, 直接给p赋值arr, 意思就是让p指向地址0x4, 然后调用函数时, i = p1 让 i 也等于了0x4, 这时你再去解引用获取0x4的内容那当让不得行, 0x4肯定是个保护的地址, 而且就算没保护, 你也没有初始化这个地址存放的值.
页:
[1]