从结构传递数组成员会导致访问读取冲突
Passing an array member from a struct causes access reading violation
我有一个带有数组成员的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++关键字一样是小写的。
相关文章:
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 读取访问冲突.这0xCDCDCDCD
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 尝试通过共享指针使用变量时读取访问冲突
- C++ 读取访问冲突,0xCDCDCDCD
- 读取缓冲区时访问冲突 UNICODE_STRING
- 从二进制文件中读取元素时引发异常(引发异常:读取访问冲突. _Pnext 0xB414D4)
- 从文件读取,并循环访问文件以写入数组
- 使用智能指针读取访问冲突
- 引发异常:读取访问冲突.**此**0x40错误
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- 如何在读取文件时访问以前的字符串?
- C++ 访问读取错误
- 使用 vtkDICOMWriter 编写 DICOM 时访问读取冲突
- 从结构传递数组成员会导致访问读取冲突
- C++访问读取位置时发生冲突,类此指针为NULL
- 将两个字符串一起分配,获取访问读取冲突
- sprintf()访问读取位置时发生冲突
- 0xccccc处的访问读取冲突