【问题标题】:Bus Error:10 with more indexes to go总线错误:10 需要更多索引
【发布时间】:2012-04-28 10:01:17
【问题描述】:

我使用 6 个整数数组,每个数组包含 256 个元素。相当标准,我想。

我面临的问题是,当我将所有这些数组初始化为全 0 时,我得到一个总线错误:10。每次在我的循环的第 240 次迭代中。

这是我的头文件...

class histEqImage {
private:
int histogramR[256];
int histogramG[256];
int histogramB[256];

int dashR[256];
int dashB[256];
int dashG[256];

void initHistograms();    
public:
//Other declarations here...
};

这是出现问题的函数...

void histEqImage::initHistograms() {
//Ensure all the values in the histogram are at 0.
for(i = 0; i <256; i++) {
    histogramR[i]= 0;
    histogramG[i] = 0;
    histogramB[i] = 0;
    dashR[i] = 0;
    dashG[i] = 0;
    dashB[i] = 0;
}
}

因此,每次我执行这部分代码时,程序都会在 i=240 处崩溃。抱歉,为了更好地说明,它发生在dashB[i] = 0; 行中

这让我烦恼不已,我看不到我的数组范围之外的地方,而且我没有在动态内存方面使用远远超出我理解的能力。

任何帮助,都会有所帮助。

【问题讨论】:

  • 你也可以显示分配代码吗?你用的是new[],对吧?
  • 这些只是简单的数组,根本没有分配。
  • 不,我的意思是histEqImage,你是在堆栈上分配它,动态分配,还是作为数组的一部分?
  • 啊,对。对不起。它只是在我的主函数histEqImage pictureDisplay; 中声明的
  • 请展示一个独立的可编译示例。

标签: c++ arrays bus-error


【解决方案1】:

由于histEqImage pictureDisplay 的大小为 6 KB(假设为 32 位 ints),它可能对于堆栈上的分配来说太大了。尝试将其移出您的 main,或动态分配。

如果您将声明移到 main 之外,请将其设为静态以避免使其具有全局可见性。

static histEqImage pictureDisplay;

int main(int argc, char *argv[]) {
    //...
}

【讨论】:

  • 将声明移到主函数之外并使其成为静态似乎已经成功了。我不知道堆栈上的项目有多大限制,感谢您的帮助。
猜你喜欢
  • 2016-07-14
  • 1970-01-01
  • 2017-07-06
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多