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

如何跨窗口访问变量?调用函数触发access violation错误求助

解决Form间函数调用的访问违例(Access Violation)错误

问题分析

你遇到的0xc0000005访问违例错误,核心原因是**Form2全局指针未指向有效的TForm2实例**,或者在TForm2的成员函数Funkcja()中错误依赖全局指针访问成员变量。

看你的代码,Funkcja()里用Form2->A = "";,如果Form2指针是空的(比如没创建实例、实例已被销毁),就会触发空指针访问错误;另外,在成员函数内部依赖全局指针访问成员属于不规范写法,应该使用当前实例的this指针。

解决方案

1. 确保Form2实例已正确创建

  • 如果是动态创建Form2,调用Funkcja()前必须先完成实例化:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      if (!Form2) {
        Form2 = new TForm2(this);
        // 需要显示窗口可添加:Form2->Show();
      }
      Form2->Funkcja();
    }
    
  • 如果依赖IDE自动创建Form2,需在项目设置里确认Form2在Auto-create forms列表中(默认仅主窗体自动创建,其他窗体需手动添加)。

2. 修改Funkcja()实现,使用当前实例访问成员变量

在TForm2的成员函数中,直接通过this指针(可省略)访问成员变量,不要依赖全局Form2指针:

void __fastcall TForm2::Funkcja()
{
  // 可直接写A,等价于this->A
  A = "";
}

这种写法能适配所有TForm2实例场景,避免因全局指针失效导致的访问错误。

额外注意

如果Form2关闭销毁后,全局Form2指针不会自动置空,再次调用Form2->Funkcja()会触发同样错误。可在FormClose事件中手动置空:

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  Action = caFree; // 销毁窗体实例
  Form2 = nullptr; // 置空全局指针
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:38:32