【问题标题】:Array of structs with Array in the struct结构中带有 Array 的结构数组
【发布时间】:2015-03-29 10:06:47
【问题描述】:

我完全卡在这个问题上...给出的代码结构如下:

typedef struct _myvar{
   uint32_t someInt;
   uint32_t *ptr;
} myvar;
...
myvar **var;
..
var = new myvar*[x]; // where x is an int
for(int i = 0; i < y; i++){ // y is usually 2 or 4
   var[i] = new myvar[z]; //create dynamic 2d array
   for(int j = 0; j < z; j++){
      var[i][j].ptr = new int[b]; //where b is another int
   }
}

我想创建一个 2d 结构,其中一部分是 3d,即 ptr 只是一个指向整数数组的指针。

我的代码可以编译,但在尝试分配内存时出现段错误,因此 ptr 可以指向它。我尝试了大约一个小时的工作,并认为是时候寻求帮助了。

谢谢!

EDIT1:修复了关于未编译代码的注释的代码问题。其次...我不能尽可能多地使用向量...我拥有的数据结构就是我必须使用的。

EDIT2: b 是动态的并在命令行中设置。出于测试目的,请使用 16。

【问题讨论】:

  • 尽可能使用std::vector,因为它维护项目的副本并管理动态内存分配,因此您不必这样做。
  • 该代码无法编译。 var = new myvar[z] 不适用于 myvar **var
  • 你试过 (var[i])[j].ptr 吗?
  • 刚刚做了,我在尝试访问它时仍然遇到段错误......所以 cout &lt;&lt; myvar[i][j].ptr[k]. 其中 i、j、k 应该在以前用于声明它的数组边界内。
  • 所以你现在有什么问题 - 你说'修复了代码问题'

标签: c++ pointers memory dynamic-allocation


【解决方案1】:

我认为您对索引感到困惑。在您的第一个循环中,您使用 var[i],所以我必须停在 x,而不是 y。对于我使用了 j 和 y 的列。不知道 z 是什么。 然后,正如其他人指出的那样,您不应该混合使用 int 和 uint32_t。 试试这个:

#include <iostream>
using namespace std;

typedef struct _myvar{
   uint32_t someInt;
   uint32_t *ptr;
} myvar;

int main() {

    myvar **var;

    int x = 3;
    int y = 4;

    var = new myvar*[x]; // where x is an int
    for(int i = 0; i < x; i++) { // i stops at x
        var[i] = new myvar[y]; //create dynamic 2d array
        for(int j = 0; j < y; j++){
            var[i][j].ptr = new uint32_t[16]; // used 16 for testing
        }
    }


    return 0;
}

【讨论】:

  • 好的,我这里有你所拥有的,但我仍然无法访问 ptr 的任何部分。即,如果我想设置 var[0][0].ptr[0] = 0;(数字 0 不是 pntr),我会遇到 seg 错误。这是我很困惑...
  • @Sharki 你能发布你的精确代码吗?我试过这个:var[0][0].ptr[0] = 0; cout &lt;&lt; "var[0][0].ptr[0] is " &lt;&lt; var[0][0].ptr[0] &lt;&lt; endl; var[2][3].ptr[15] = 15; cout &lt;&lt; "var[2][3].ptr[15] is " &lt;&lt; var[2][3].ptr[15] &lt;&lt; endl; 并且有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多