You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用指针作为do...while循环条件触发读取访问违规如何解决

问题根因

你的代码核心错误出在scanf函数的参数传递逻辑上:

  • pintEmployeeType本身就是已经传入的int*类型指针,存储的是目标int变量的内存地址,scanf读取数值时直接传这个指针即可。
  • 你写的&pintEmployeeType是取指针变量自身的栈内存地址,相当于把用户输入的整数值直接覆盖了指针本身的存储内容,而没有写入指针原本指向的int变量空间。
  • 走到while判断行时,*pintEmployeeType会把刚才被错误覆盖的整数值当成内存地址去读取,这个地址基本都是非法内存地址,自然触发读取访问违规。
修复方案

只需要修改scanf一行代码即可:

// 错误写法
// scanf("%d", &pintEmployeeType);
// 正确写法
scanf("%d", pintEmployeeType);
额外注意事项
  • 调用GetEmployeeInfo函数时,必须保证传入的指针指向合法可写的int变量,不能传入空指针、野指针,正确调用示例如下:
int main()
{
    int employeeType;
    GetEmployeeInfo(&employeeType); // 传入局部int变量的地址
    // 后续正常使用employeeType即可
    return 0;
}
  • 建议补充scanf返回值判断,处理用户输入非数字的异常场景,避免出现死循环或者逻辑错误。

内容的提问来源于stack exchange,提问作者user11053570

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:09:01