- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道这听起来可能很奇怪,但是是的,现在是 2009 年,我需要使用 BCB5 编写小型应用程序 :)
问题是 DynamicArray 在尝试从工作线程内扩展它时抛出 OutOfBound 异常。
假设我有一个全局变量
DynamicArray X;
在主线程中,我检查数组的长度,结果为 0,这没问题(长度未设置)
Application->MessageBox(itoa(X.Length,str , 10), "", MB_OK);
下面是我的工作线程类
class ArrayModifierThread : public TThread
{
riêng tư:
DynamicArray __thread X;
protected:
void __fastcall Execute();
công cộng:
__fastcall ArrayModifierThread(bool CreateSuspended);
void setX(DynamicArray &a);
};
到目前为止一切顺利。接下来我创建新线程:
ArrayModifierThread *t = new ArrayModifierThread(true);
t->setX(X); // Pass reference to my global DynamicArray
t->Resume();
此处执行 Execute() 方法:
void __fastcall ArrayModifierThread::Execute()
{
X.Length = 10;
X[5] = 45.5;
}
我期望的是全局数组被扩展并且第 6 个元素的值为 45.5。
但从主线程内部进行更仔细的调查会发现 Length = 0 和 ArrayOfBounds 异常:
Application->MessageBox(itoa(__X.Length,str , 10), "", MB_OK);
Application->MessageBox(itoa(__X[5],str , 10), "", MB_OK);
谁能告诉我我错过了什么?
1 Câu trả lời
Trong của bạnExecute
方法中,您正在修改线程的 X
字段,而不是全局X
变量。尽管 setX
方法通过引用接收其参数,但成员变量不是引用。它存储 DynamicArray
值的拷贝,并且更改 Length
属性可确保它引用唯一数组。
setX
chức năng接收对全局变量的引用,正如您在“答案”中正确观察到的那样,但它不会保留 对它的引用。当它分配对象的 X
字段时,它会创建一个拷贝。
也许您还打算将 X
声明为引用:
riêng tư:
DynamicArray& X;
那行得通。您的 setX
函数将不再起作用,因为您不允许在初始化后“重新安置”引用。相反,您需要在线程的构造函数中对其进行初始化:
ArrayModifierThread(DynamicArray& a): X(a) { ... }
您还可以将指针存储到数组而不是引用:
riêng tư:
DynamicArray* X;
công cộng:
void setX(DynamicArray& a) {
X = &a;
}
protected:
void Execute() {
X->Length = 10;
(*X)[5] = 45.5;
}
您还需要注意的是您的代码不是线程安全的。 (这里也不是我的。)您有多个线程在没有任何保护的情况下修改同一个共享资源(数组),例如关键部分。不过,这超出了这个问题的范围。首先搜索 Stack Overflow 和 Web 的其余部分,然后如果您需要有关该问题的帮助,然后回来提出新问题.
关于c++ - DynamicArray 抛出 OutOfBounds 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/506240/
我有这个数组: ArrayList problems = new ArrayList ( 100 ); 然后我尝试制作一个对象放入其中: Problem p = new Problem (); p.s
我正在编写一个java程序,它将电话簿信息存储在数组中。每当我尝试将一些条目放入该数组中时,都会出现 OutOfBound 异常。 private int size = 0; private Entr
我正在编写一个程序,查找一行文本中是否存在一对由 2 个字母组成的字母,例如,如果输入“AA”,我会在字母表 [0][0] 中加 1。当我尝试输入“aabbcc”时出现此错误: Exception i
我知道这听起来可能很奇怪,但是是的,现在是 2009 年,我需要使用 BCB5 编写小型应用程序 :) 问题是 DynamicArray 在尝试从工作线程内扩展它时抛出 OutOfBound 异常。
我正在尝试为游戏编写交易插件。我的想法是,一个玩家向另一个玩家发送请求,如果另一个玩家接受,那么双方都必须选择一个元素进行交易。 我有 4 个 ArrayList:存储请求者、存储请求、存储请求者选择
LogCat 输出的错误指向 QuestionView.java 的第 37 行,我将在下面的代码中对其进行注释。下面我有 4 个类的 4 个 fragment 。我还有 LogCat 的输出。 Ma
我正在尝试运行我的应用程序,但出现构建错误 - OutOfBounds.com.android.build.api.transform.TransformException:java.lang.Arr
我正在尝试使用 RecyclerView 构建一个简单的列表,这将允许我添加/删除项目。 我可以删除这些项目,但在删除项目后,似乎没有“重新计算”位置。 例如,我的列表中有 20 个项目,如果删除最后
Câu hỏi này đã có câu trả lời: Chỉ số mảng nằm ngoài hành vi giới hạn (10 câu trả lời) Đã đóng 8 năm trước. Tôi tò mò về đoạn mã C sau int main(){
Tôi là một lập trình viên xuất sắc, rất giỏi!