我正在尝试对动态浮点数(float *)进行“保存/加载”序列。我有一个将数据保存为float4 *dst;
的数组。
我有这段代码用于保存数组
int sz = properties.height * properties.width;
float * d_array = (float*)malloc(4 * sizeof(float) * sz);
for (size_t i = 0; i < sz; i++, dst++)
{
d_array[4 * i + 0] = dst->x;
d_array[4 * i + 1] = dst->y;
d_array[4 * i + 2] = dst->z;
d_array[4 * i + 3] = dst->w;
}
// Up to this point, everything works great
ofstream outS(backupdata, ios::out | ios::binary);
outS.write((char *)&d_array, 4 * sz * sizeof(float)); // <- This is where the code breaks
outS.close();
这是我得到的错误:
Unhandled exception at 0x00007FFDC83316EE (vcruntime140d.dll) in myproject.exe: 0xC0000005: Access violation reading location 0x000000FECA900000.
但是当我从指针错误行中删除sz
时,它就可以正常工作(尽管显然不能到达整个数组)
我想念什么?写入功能受内存限制吗?如果可以,我该如何克服这个问题?
答案 0 :(得分:4)
只要做
outS.write((char *)d_array, 4 * sz * sizeof(float));
d_array
值必须保存其内容的数组的地址
使用&d_array
,您(尝试)保存d_array
的地址,然后保存其后的内存