鱼C论坛

 找回密码
 立即注册
查看: 793|回复: 3

[已解决]为什么权限访问冲突,大佬们看看

[复制链接]
发表于 2021-1-26 17:23:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[10] = {4,8,9,7,6,4,26,9,5,2};
        int *p;
        m = 0;
        p = arr[0];
        f(p, 10);
        for (m = 0;m < 10;m++)
        {
                printf("%d ", arr[m]);
        }
}
最佳答案
2021-1-27 09:53:28
楼上都没答道点子上啊, 这里问题是 main 里, 给p赋值的时候, p是一个指针啊, 直接给p赋值arr[0], 意思就是让p指向地址0x4, 然后调用函数时, i = p1 让 i 也等于了0x4, 这时你再去解引用获取0x4的内容那当让不得行, 0x4肯定是个保护的地址, 而且就算没保护, 你也没有初始化这个地址存放的值.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-26 19:32:47 | 显示全部楼层
本帖最后由 风过无痕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[10] = {4,8,9,7,6,4,26,9,5,2};
        int *p;
        m = 0;
        p = arr[0];
        f(p, 10);
        for (m = 0;m < 10;m++)
        {
                printf("%d ", arr[m]);
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-26 20:18:10 | 显示全部楼层
问题应该不在你标注的那一行,而应该在下面两行
*i和*j是取地址对应的值,只能做赋值运算符的右值,不能做赋值运算符的左值
具体如何修改,我看看,一会儿再给你修改结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-27 09:53:28 | 显示全部楼层    本楼为最佳答案   
楼上都没答道点子上啊, 这里问题是 main 里, 给p赋值的时候, p是一个指针啊, 直接给p赋值arr[0], 意思就是让p指向地址0x4, 然后调用函数时, i = p1 让 i 也等于了0x4, 这时你再去解引用获取0x4的内容那当让不得行, 0x4肯定是个保护的地址, 而且就算没保护, 你也没有初始化这个地址存放的值.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 08:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表