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

Passing an array member from a struct causes access reading violation

本文关键字:访问 读取 冲突 组成员 结构 数组      更新时间:2023-10-16

我有一个带有数组成员的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]);
}

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

怎么样:

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

这将避免泄漏内存,就像如果它起作用一样。

然后避免在代码的某些部分制作testStruct指针,并改用引用或局部变量。

最后struct像任何C++关键字一样是小写的。