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

实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:20:08