错误、漏洞、问题 - 页 3150

 
Nikolai Semko #:

三元运算符看起来更简洁(IMHO)。

int limit = prev_calculated==0 ? 0: prev_calculated-1;

更加简洁的方式。

int limit = prev_calculated-bool(prev_calculated);

:))

 
Nikolai Semko #:

我已经写过,在这个结构中,你是用rate_total访问缓冲区的索引(当prev_calculated == 0时)。
,这是一个溢出,因为rate_total是缓冲区的大小,其最后一个元素 rate_total-1

是的,我明白了为什么现在会发生溢出的情况!

为什么这种构造以前有效,而现在却不起作用

int limit = rates_total-prev_calculated;

for(int i=limit; i>=0; i--)

因为缓冲区正好被分配到 rates_total
,而不是rates_total+1

我在等着听Artyom怎么说,他了解这个问题。
 
Roman #:

是的,我明白了为什么现在会发生溢出的情况!

为什么这个设计以前能用,而现在 却不能用?

因为缓冲区正好被分配到 rates_total
,而不是rates_total+1

没有所谓的奇迹。
,如果它以前是有效的,那么它一定是不同的代码。

 
Roman #:

有了这个设计。


指标缓冲区出界。

请给我看一个周期i>=0的ticks 的例子
也许我忘记了我做错了什么。

大致上在最大的边上减少2或3个索引以确保)。

 
Nikolai Semko #:

没有奇迹。
,如果它以前是有效的,那么它一定是不同的代码。

以前,正确的极限计算是

int limit = rates_total-1-prev_calculated;

而它将进入i>=0的循环。

for(int i=limit; i>=0; i--)

但现在不行了,因为极限变成了-1

 
这个讨论是偏离主题的,它属于一些新手的主题
 
Roman #:

过去正确的计算方法是

它将进入i>=0的循环。

现在它不会进去了,因为限制变成了-1。

我以前也不能用同样的代码登录。
,不要编造东西。

如果你不相信我,可以从Hatimlansky 那里下载旧的构建并检查它。

 
TheXpert #:
这个讨论在这里是偏离主题的,它属于一些新手的主题

如果你以前没有使用过这种设计,那么就不要用你的offtop。

 
Nikolai Semko #:

我以前也不能用同样的代码登录
,这不是瞎编的。

Hatimlansky 那里下载旧的构建,如果你不相信我,可以检查一下。

阿特姆也使用了这种结构。
这是他在上面描述的,所以只有他明白这里的问题。

 
Roman #:

过去正确的计算方法是

它将进入i>=0的循环。

而现在它没有,因为极限变成了-1。

总是有一个检查:如果(limit>1)limit=rates_total-1。这是针对计算中没有i+something的情况。如果有,那么这些 "多少多少 "应该包括在结构中:limit=rates_total-1-some-something。

没有它,总是会有一个阵列超限。因为Rates_total除了Bars()之外没有别的东西。相应地,如果有5000个柱子,而我们的索引是5000,我们将落在阵列的限制之外(柱子的计算从零开始)。

在你的例子中,限额的计算是错误的。

int limit = rates_total-1-prev_calculated;

它应该是这样的。

int limit = rates_total-prev_calculated;

并在其之后检查限制是否>1

如果limit大于1,则limit = rates_total-1