地址上的二维浮点数组

时间:2016-10-18 08:12:44

标签: c arrays pointers

我正在尝试在内存地址上创建一个二维浮点数组。 这就是我所拥有的:

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));

所以我做错了。 你能告诉我什么是错的吗?为什么?

1 个答案:

答案 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;
}