结构中带有Array的结构数组

时间:2015-01-30 00:33:08

标签: c++ pointers memory dynamic-allocation

我完全坚持这个问题......给出的代码结构如下:

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只是一个指向int数组的指针。

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

谢谢!

EDIT1:关于代码编译没有编译的固定代码问题。其次......我不能像我想的那样使用向量...我所拥有的数据结构是我必须使用的。

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

1 个答案:

答案 0 :(得分: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;
}