我正在尝试在内存地址上创建一个二维浮点数组。 这就是我所拥有的:
float ** adresse = (float**)(0xC0000001);
uint8_t dim1Size = 16;
uint16_t dim2Size = 11;
for(int i = 0; i < dim1Size; i++)
{
adresse[i] = (float*)(adresse+dim1Size*sizeof(float*) + dim2Size*sizeof(float));
}
我在这条线上“飞出去”:
adresse[i] = (float*)(adresse+dim1Size*sizeof(float*) + dim2Size*sizeof(float));
所以我做错了。 你能告诉我什么是错的吗?为什么?
答案 0 :(得分:2)
代码做了很多假设。
将整数转换为指针是实现定义的:
(float**)(0xC0000001);
必须为引用的类型正确对齐生成的指针。以1结尾的地址可能没有正确对齐类型float *。
修复后,需要有两个分配,一个用于float类型指针的数组,另一个用于float类型的二维数组。
float ** adresse = //aligned and valid memory of size sizeof( float* ) * dim1Size
float* objects = //aligned and valid memory of size sizeof( float ) * dim1Size * dim2Size
然后迭代指针数组:
for( size_t i = 0; i < dim1Size; i++)
{
adresse[i] = objects + dim1Size;
}