【问题标题】:Accessing a 3D array in C++在 C++ 中访问 3D 数组
【发布时间】:2015-08-13 22:32:24
【问题描述】:

我有一个 char***,我动态地为它分配了一些内存。但是,当我尝试为其分配一些值时,会出现分段错误。我使用的尺寸不是太大。它在我创建 char[768][1024][3] 时有效,但在我使用相同的精确值动态添加时无效。这是我的代码的 sn-p:

pic = new char**[height];
    for(int i = 0; i < height; i++)
    {
        pic[i] == new char*[width];
        for(int j = 0; j< width; j++)
        {
            pic[i][j] == new char[3];
        }
    }
    pic[0][0][0] = 'a';//seg fault here
    exit(1);

【问题讨论】:

  • @πάνταῥεῖ LOL 还没有。我必须克服这个分段错误
  • 为什么不使用嵌套的std::vector's?更容易使用。
  • 很简单。你知道=== 之间的区别吗?我假设任何带有所有警告的编译器(因为它们总是应该是)会提到这一点。例如 Visual C++: 警告 C4553: '==': operator has no effect;你想要'='吗?
  • 好吧,因为我们必须将给定的代码转换成线程。我们不能使用向量或任何其他东西。只需使用给定的代码并向其中添加线程即可。我已经完成了困难的部分,但被困在了本应该很容易的部分!
  • 你可以很好地使用std::vector&lt;std::thread&gt;std::threadsupports move构造。

标签: c++ multidimensional-array segmentation-fault dynamic-memory-allocation


【解决方案1】:

pic[i] == new char*[width]; -> 为什么有一个== 比较而不是= 赋值?

pic[i][j] == new char[3]; 也是如此 -> 正在进行比较并且没有分配。

【讨论】:

  • 啊该死的,我怎么能错过它。感谢任何方式:)
【解决方案2】:

简单地说:

pic = new char[height * width * 3];

访问pic[i][j][k] 使用:

pic[i * width + j * 3 + k]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2015-09-12
    • 1970-01-01
    • 2012-09-30
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多