2011-04-15 91 views
-1

我malloc一個2d數組。 2d數組是一個結構的一部分,當我嘗試malloc時,我得到一個錯誤,malloc有太多的參數。malloc的參數太多

malloc(world->representation, sizeof(int *) * mapHeight); 
int i; 
for (i = 0; i < mapHeight, i++) 
{ 
    malloc(world->representation[i], sizeof(int) * mapWidth); 
} 

這應該怎麼mallced,如果它的一部分的結構?

回答

4

您錯誤地使用了malloc。正確的用法是:

world->representation = malloc(sizeof(int *) * mapHeight); 

world->representation[i] = malloc(sizeof(int) * mapWidth); 
0

應該是:

world->representation[i] = malloc(sizeof(int) * mapWidth); 
2

malloc只需尺寸,並返回指向分配的內存。

0

的malloc返回它的內存,它不填寫好您也應該檢查返回值,以確保它不爲NULL:

world->representation = malloc(sizeof(world->representation[0]) * mapHeight); 
assert(world->representation); 
int i; 
for (i = 0; i < mapHeight; ++i) { 
    world->representation[i] = malloc(sizeof(word->representation[i][0]) * mapWidth); 
    assert(world->representation[i]); 
} 
-2

的malloc()只有1個參數,它是你想分配的塊大小,那麼你就必須鍵入它轉換爲相應的指針類型

最可能的是你的代碼是:

world->representation = (int **) malloc(sizeof(int *) * mapHeight); 
int i; 
for (i = 0; i < mapHeight, i++) { 
    *(world->representation+i) = (int *) malloc(sizeof(int) * mapWidth); 
} 
+2

在C你不應該強制轉換malloc的返回值。 (在C++中,你通常不應該使用malloc來分配簡單的整數數組。) – 2011-04-15 11:47:56

+0

@Joe,爲了安全起見,我一直在做這件事。你永遠不知道你的代碼何時會與C++混合。 – BiGYaN 2011-04-16 04:23:35

+0

在C中,演員陣容使得它不那麼安全。如果你不知道你在寫什麼語言,你應該首先弄清楚。 – 2011-04-16 08:25:36