实现key_print1函数时遇内存指针未知错误,请求技术解答
错误原因分析
核心问题1:同名变量遮蔽
函数参数已经命名为key,你在函数内部又声明了同名的指针变量key,这会直接覆盖(遮蔽)外部的函数参数,导致你完全无法访问调用者传入的结构体指针,后续操作的都是你自己定义的局部变量key1,和需求要求的目标结构体毫无关系。
核心问题2:无关局部变量冗余
你定义的key1、key2是函数内的全新局部变量,既没有和传入的参数关联,也没有被初始化,它们的值是内存里的垃圾值,打印这些值完全不符合“打印传入结构体的key1、key2成员”的需求。
正确实现方式
首先明确:Key应该是指向目标结构体的指针类型(根据需求描述“参数key指向结构体”),以下是标准实现:
第一步:先明确结构体和指针类型定义(示例)
#include <stdio.h> // 定义结构体 typedef struct { int key1; int key2; } KeyStruct; // 将结构体指针重命名为Key,符合参数类型要求 typedef KeyStruct* Key;
第二步:正确实现key_print1函数
void key_print1(Key key) { // 直接通过传入的指针访问结构体成员即可 printf("key1: %d, key2: %d\n", key->key1, key->key2); }
测试用例(验证功能)
int main() { KeyStruct test_struct = {123, 456}; // 传入结构体的地址(即Key类型的指针) key_print1(&test_struct); return 0; }
特殊情况:如果Key是结构体类型(而非指针)
若你的Key是结构体本身(而非指针),需求里的“指向结构体”意味着参数应该是指针类型,此时函数定义应调整为:
typedef struct { int key1; int key2; } Key; void key_print1(Key* key) { printf("key1: %d, key2: %d\n", key->key1, key->key2); }
内容的提问来源于stack exchange,提问作者user22712878
相关产品推荐
相关产品推荐

