我的代碼使用兩個結構,塊和佈局(這是一個任意數量的塊的集合)。結構中的內存分配
struct block{
char type;
unsigned short int loc;
unsigned short int size[2];
};
struct layout{
unsigned short int no;
struct block *blocks;
short int **moves;
};
我使用這個功能來快速初始化(和部分填充)的結構佈局,基於一組塊:
struct layout init_layout(int block_no, struct block *blocks){
struct layout new_layout;
int i, j;
new_layout.no = (unsigned short int)block_no;
// the following two lines cause an memory corruption error
new_layout.blocks = (struct block *)malloc(block_no);
new_layout.moves = (short int **)malloc(block_no);
for(i = 0; i < block_no; i++){
new_layout.blocks[i] = blocks[i];
new_layout.moves[i] = (short int *)malloc(2);
for(j = 0; j < 2; j++)
new_layout.moves[i][j] = 0;
}
return new_layout;
}
到目前爲止,我沒有看到,有一些錯誤用它。然而,當我打電話這樣的功能
int main(int argc, char** argv){
// just some arbitrary values for 10 blocks
int size[2] = {2, 2};
struct block *blocks = (struct block *)malloc(10);
for(length = 0; length < 10; length++){
blocks[length] = init_block('R', 1, size);
}
struct layout puzzle;
puzzle = init_layout(10, blocks);
return 0;
}
我最終以內存損壞錯誤,由init_layout()中的評論標記。 我在執行中錯過了什麼?
如果your'r最多使用2D陣列,用於'moves',最好使用一個,而不是一個指針的指針。 – Olaf
那麼爲什麼不將'moves'的第0維移動到'block'? – user3528438