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

使用多个结构体指针导致程序运行崩溃的问题咨询

问题原因:未初始化的野指针

你这段代码的核心问题是指针未初始化,也就是所谓的「野指针」问题:

  • a *a1, *a2; 只是声明了两个指向a类型的指针变量,但并没有给它们分配有效的内存空间,这两个指针当前指向的是内存中的随机地址。
  • 当你执行a1->x = 3;时,纯粹是运气好——刚好这个随机地址对应的内存区域没有被系统保护,也没有覆盖其他程序数据,所以看似能正常输出3,但这属于未定义行为,完全不可靠。
  • 到操作a2->x = 2;时,这个野指针指向的内存区域可能是系统禁止写入的地址,或者覆盖了程序的关键数据,直接导致程序运行异常,自然没法正常输出2。

修复方案

要解决这个问题,你需要给指针分配有效的内存,两种常见方式:

  1. 使用new在堆上分配内存:
#include <iostream>

using namespace std;

typedef struct A{
    int x;
}a;

int main()
{
    a *a1 = new a; // 分配堆内存
    a *a2 = new a;
    a1->x = 3;
    cout << a1->x << endl;
    
    a2->x = 2;
    cout << a2->x << endl;

    // 释放堆内存,避免内存泄漏
    delete a1;
    delete a2;
    return 0;
}
  1. 使用栈上的结构体,再取地址:
#include <iostream>

using namespace std;

typedef struct A{
    int x;
}a;

int main()
{
    a obj1, obj2; // 栈上创建结构体实例
    a *a1 = &obj1;
    a *a2 = &obj2;
    a1->x = 3;
    cout << a1->x << endl;
    
    a2->x = 2;
    cout << a2->x << endl;

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:20:30