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
相关产品推荐
相关产品推荐

