2016-10-18 83 views
0

我想在內存地址上創建一個二維浮點數組。 這是我有:地址上的二維浮點數組

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

請澄清,如果數據是一個二維數組或基於指針的查表。您提到二維數組,但代碼中沒有二維數組。 – Lundin

+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; 
} 
+0

這裏的主要問題是很可能不是位於該地址的指針數組,而是浮點數的二維數組。在這種情況下,這個答案是沒有用的。 – Lundin