首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

退出程序时出现“access violation at address 0046d475 in module 'ss.exe' write of address

2012-03-17 
退出程序时出现“access violation at address 0046d475 in module ss.exe write of addressaccess viola

退出程序时出现“access violation at address 0046d475 in module 'ss.exe' write of address
access violation at address 0046d475 in module 'ss.exe' write of address 00505850
DEBUG时没有此提示框。
RELEASE以后,在关闭程序时会跳出此框。我没法调试,在MAP里也定位不到00505850
谢谢谢谢谢谢,有人说是访问了已删除的资源,或者访问了空指针。
不知道怎么找找找

[解决办法]
如果这样定义,就会有问题 TButton *btn[16],这是在栈上定义数组,不需要delte 了
[解决办法]
如果一定要delete ,就这样
TButton **btn;


 btn=new TButton *[16];

delete []btn;
[解决办法]
void __fastcall TForm4::Button2Click(TObject *Sender)
{
TButton *Btn[16]; //這裡定義了一個數組,數組裡有16個元素(16個指針),
//btn是臨時變量,函數退出會自動釋放該數組空間
for (int i = 0; i < 16; i++)
{
Btn[i] = new TButton(this);
Btn[i]->Parent = this;
Btn[i]->Align = alBottom;
Btn[i]->Caption = String(i);
}
delete[] Btn;//並沒有用new 分配內存,就不需要delete了,多余的delete 會造成不可知的結果。
}


如 CppFile 所說 用 TButton ** 或者 使用 std:vector<TButton *>

要弄清楚的地方: 多重指針及其內存分配的用法, 數組及變量的生命期,

”delete[] Btn;//跟delete []btn;应该没有区别的吧“ //C/C++ 對寫法很寬松,這是沒有區別的。

热点排行