【问题标题】:array of pointers in C++ and what is "BUS ERROR" [closed]C ++中的指针数组以及什么是“BUS ERROR”[关闭]
【发布时间】:2013-09-12 16:06:02
【问题描述】:
#include<cstdio>
#include<string>
#include<iostream>

using namespace std; 

int main()
{
        int a[]={0,1,2,3};
        int *r[]={NULL};

        for(int i=0;i<4;i++)
        {
                r[i]=&a[i];
                cout << &a[i] << endl;
                cout << a[i]<<endl;
        }

        for(int i=0;i<4;i++)
        {
                cout << r[i] << endl;
                cout << *r[i] << endl;
        }
        return 0;
}

我最近开始研究指针数组。有人可以帮我找出上述程序中的错误吗..

我附上了在windows和linux平台上运行时的结果截图。

在 Windows 上,*r[] 和 a[] 的地址匹配,但值仍然不匹配。

在 linux 上,有时会显示“BUS ERROR”,有时会显示“Segmentation fault”。

如果有人解释“BUS ERROR”是什么意思会更好?为什么它会出现在这个程序中。

【问题讨论】:

  • 2 个单词 - 内存损坏。
  • NULL 而不是0 的人(当他们真正想要整数零而不是空指针时)是可怕的人。问 Stephan T. Lavavej,他会告诉你战争故事。
  • 当我想要一个指针 0 时我写 0,我只是没有看到指针有一个特殊值的意义。

标签: c++ arrays pointers


【解决方案1】:

您的数组r 中只有一个元素的空间,但您存储了 4。这会覆盖内存,导致崩溃。

改变这个:

int *r[]={NULL};

到:

int *r[sizeof a / sizeof *a];

这使得ra 具有相同数量的元素,即4 个。

【讨论】:

  • 创建一个社区 wiki 问题是否是个好主意,例如“我正在写入数组边界之外的索引,为什么我的程序崩溃/挂起/给出错误的结果?”,这样我们就可以将这些类型的问题标记为重复问题并将它们指向它?
  • @sashoalm,我相信我们有一些。
  • 我搜索了,但找不到。
【解决方案2】:

int *r[]={NULL}; 应该是int *r[]={0, 0, 0, 0};

这将为您的以下代码所需的四个指针分配空间。

总线错误:What is a bus error?

【讨论】:

    【解决方案3】:

    您没有为r 分配足够的空间。试试int *r[4];,不会出现分段错误。

    int *r[] = {0} 等同于int *r[1];

    【讨论】:

      【解决方案4】:

      r 是一个指针数组,但在您的代码中,它只有一个元素。你很幸运能在 Windows 上运行它,但这是一种未定义的行为。它今天在你的编译器上似乎可以工作,但它不是合法的 C 或 C++,并且不能保证它在你下次运行程序时仍然可以工作。或者它甚至现在还没有覆盖基本数据,而您只是还没有遇到将导致的问题。

      【讨论】:

        猜你喜欢
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-10
        • 1970-01-01
        • 2013-04-17
        • 1970-01-01
        相关资源
        最近更新 更多