- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我正在处理的新模块中遇到堆栈损坏问题,该模块是大型遗留项目的一部分。我的代码是使用 Borland C++Builder 5.0 用 C++ 编写的。
我已将问题跟踪到以下函数:
// Note: Class TMarshalServerClientThread has the following objects defined
// CRITICAL_SECTION FCriticalSection;
// std::vector<TMarshalTagInfo*> FTagChangeQueue;
void __fastcall TMarshalServerClientThread::SendChangeNotifications()
{
EnterCriticalSection(FCriticalSection);
try {
if (FTagChangeQueue.size() == 0) {
return;
}
// Process items in change queue
FTagChangeQueue.clear();
} __finally {
LeaveCriticalSection(FCriticalSection);
}
}
此函数在工作线程(从 TThread 派生)的上下文中调用。一个不同的线程在数据可用时用数据填充更改队列。更改队列受临界区对象保护。
当代码运行时,我在试图离开关键部分时偶尔会遇到访问冲突。据我所知,有时当输入 __finally 部分时,堆栈已损坏。堆上的类实例没有问题,但指向该类的指针(例如“this”指针)似乎无效。
如果更改队列为空时删除返回调用,问题就会消失。此外,处理队列中项目的代码不是问题的根源,因为我可以将其注释掉,问题仍然存在。
所以我的问题是在 C++Builder 5 中使用 __finally 时是否存在已知问题?从 try __finally block 中调用 return 是错误的吗?如果是,为什么?
请注意,我意识到有不同/更好的方法来做我正在做的事情,因此我正在重构。但是,我不明白为什么这些代码会导致堆栈损坏。
最佳答案
正如@duDE 指出的那样,您应该使用一对__try、__finally 而不是混合使用C++ try 和Borland 扩展__终于。
关于c++ - try __finally block 中可能的堆栈损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17366760/
我在我正在处理的新模块中遇到堆栈损坏问题,该模块是大型遗留项目的一部分。我的代码是使用 Borland C++Builder 5.0 用 C++ 编写的。 我已将问题跟踪到以下函数: // Note:
在下面的代码中,函数foo 递归调用了一次。内部调用导致引发访问冲突。外部调用捕获异常。 #include #include void foo(int cont) { __try
我有一个主要用 C 编写的库,它的某些部分应该是线程安全的,并且我使用全局自旋锁来保护代码的关键部分。 现在我的问题是: 我应该从受自旋锁保护的关键部分内部调用用户的一些回调,以防这些回调生成异常,在
我认为这段代码是否正确: try { Screen->Cursor = crHourGlass; try { throw Exception("
我是一名优秀的程序员,十分优秀!