鱼C论坛

 找回密码
 立即注册
查看: 929|回复: 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肯定是个保护的地址, 而且就算没保护, 你也没有初始化这个地址存放的值.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-26 19:32:47 | 显示全部楼层
本帖最后由 风过无痕1989 于 2021-1-26 19:43 编辑

变量 i 既作为循环变量,就不要再用作为其他变量,将 它改为其他的变量即可
由于不知道你的程序想要达到什么目的,无法帮你修改程序

  1. #include <stdio.h>

  2. void f(int *p1, int n)
  3. {
  4.         int i, *p, temp, *j, *k, m;
  5.         m = (n - 1) / 2;
  6.         k = p1;
  7.         j = p1 - 1 + n;
  8.         p = p1 + m;
  9.         for (;i <= (p+1);i++)
  10.         {
  11.                 temp = *k;
  12.                                        

  13.                 *j = *k;
  14.                 *j = temp;
  15.         }
  16. }


  17. void main()
  18. {
  19.         int m, arr[10] = {4,8,9,7,6,4,26,9,5,2};
  20.         int *p;
  21.         m = 0;
  22.         p = arr[0];
  23.         f(p, 10);
  24.         for (m = 0;m < 10;m++)
  25.         {
  26.                 printf("%d ", arr[m]);
  27.         }
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 02:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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