从结构传递数组成员会导致访问读取违规

时间:2018-01-13 12:38:58

标签: c++ arrays struct access member

我有一个带有数组成员的struct。我成功地使用值填充此数组。我然后将它传递给一个函数,然后我尝试访问这些相同的值,导致访问冲突。有任何想法吗?

这是我的结构定义:

struct testStruct{
 vec3* arr;

  void resizeVerts(int size) {
        arr= new vec3[size];
    }
};

我按如下方式调整大小并填充数组:

testStruct->resizeVerts(vertices.length());
for (int i = 0; i < vertices.length(); i++) {
    testStruct->arr[i].x = vertices[i].x;
    testStruct->arr[i].y = vertices[i].y;
    testStruct->arr[i].z = vertices[i].z;
}   

现在将它传递给一个函数(这是出现错误的地方):

void ReadFromStruct(struct testStruct){
  vec3 tempArr[1500] = {};
  for (int i = 0; i < vertices.length(); i++) {
    tempArr[i].x=testStruct[i].x;
    tempArr[i].x=testStruct[i].y;
    tempArr[i].x=testStruct[i].z;
  }

我尝试使用矢量,但导致矢量下标超出范围。

    for (int i = 0; i < vertices.length(); i++) {
            std::vector<vec3> temp;
            temp[i].x = vertices[i].x;
            temp[i].y = vertices[i].y;
            temp[i].z = vertices[i].z;
            testStruct.push_back[temp];
        }

更新

使用向量并调整大小我现在尝试了以下内容:

    testStruct->arr.reserve(vertices.length());
for (int i = 0; i < vertices.length(); i++) {
    testStruct->arr[i].x = vertices[i].x;
    testStruct->arr[i].y = vertices[i].y;
    testStruct->arr[i].z = vertices[i].z;
}   

    testStruct->arr.reserve(vertices.length());
for (int i = 0; i < vertices.length(); i++) {
    std::vector<vec3> temp;
    temp.reserve(vertices.length());
    temp[i].x = vertices[i].x;
    temp[i].y = vertices[i].y;
    temp[i].z = vertices[i].z;
    testStruct->arr.push_back(temp[i]);
}

两者都给我矢量下标超出范围崩溃。

1 个答案:

答案 0 :(得分:1)

怎么样:

struct testStruct{
   std::vector<vec3> arr;
   void resizeVerts(int size) {
       arr.resize(size);
   }
};

这样可以避免泄漏内存,如果它可以工作的话。

然后避免在代码的某些部分中生成testStruct指针,而是使用引用或局部变量。

最后struct就像任何C ++关键字一样小。