gpt4 book ai didi

c++ - 数组索引循环开始而不是内存访问错误

转载 作者:行者123 更新时间:2023-12-04 14:46:04 24 4
gpt4 key购买 nike

我目前正在开发一个视觉系统,该系统通过我用 C/C++ 编写的计算机应用程序进行控制/监控。如果您想知道我为什么用 C/C++ 编写,基本上是因为我的视觉传感器 (LMI Gocator 2490) 具有用 C 开发的功能,并且我正在使用 opencv (C++) 来分析其数据。长话短说,我上过 1 门 C 语言的信息学类(class),但我不擅长 C++。

我想知道是否有一种简单的方法,例如使用或编写一个函数来检索循环回到其开头的数组索引,而不是尝试在不属于数组的索引中读写这也会导致内存访问冲突。例如:

long a[4];

for (size_t i = 0; i < sizeof(a) / sizeof(long); i++)
{
if (a[i] && a[i + 1]) //Define some conditions regarding a[i] and a[i+1]
{
//Process code
}
}

所以在这里,很容易理解,当我达到值 3 时,我将遇到内存访问冲突。我想做的是拥有某种机制,它会返回一个“循环”回到开始的数组索引。在上面显示的情况下,i+1 其中 i = 3 将为 0。如果我要输入 i+2,我想得到 1,依此类推...

这可能很愚蠢,但它会让我省去在 for 循环内的某些 switch/case 语句中编写 4 次相同逻辑的痛苦,然后我需要在调试时对所有 4 个逻辑应用修改。 . 谢谢!

最佳答案

到达上限时使用模数回绕

long a[4];
size_t sz = sizeof(a) / sizeof(long);

for (size_t i = 0; i < sz; i++)
{
if (a[i] && a[(i + 1) % sz]) //Define some conditions regarding a[i] and a[i+1]
{
//Process code
}
}

虽然可能不是 super 优化的性能(好吧,值为 4,编译器可以用掩码交换模数,所以没问题)。

一般情况下,避免除法,检查是否超限,如果超限则选择0

for (size_t i = 0; i < sz; i++)
{
size_t j = i < sz-1 ? i+1 : 0;
if (a[i] && a[j]) //Define some conditions regarding a[i] and a[i+1]
{
//Process code
}
}

(代码将在 C 和 C++ 中运行)

关于c++ - 数组索引循环开始而不是内存访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70056975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com