#include <malloc.h>
#include <stdio.h>
int main()
{
const int sizex = 3;
const int sizey = 2;
int y;
int** ia = (int**)malloc(sizey * sizeof(int*) + sizey * sizex * sizeof(int));
int* iax = (int*)(ia + sizey);
for (y = 0; y != sizey; ++y, iax += sizex)
ia[y] = iax;
/*
for是在建立開頭的index
如果沒做的話
這時的ia[y]沒初始化
&ia[y][x]會是不合法的address(把值印出來就知道了)
執行下去就會出錯
執行for以前的記憶體 執行for以後的記憶體(這裡的iax是指之前的iax)
ia ia
↓ ↓
----- -----
int * int * iax &ia[0]
----- -----
int * int * iax+3 &ia[1]
----- -----
int iax int iax &ia[2]
----- -----
int int &ia[3]
----- -----
int int &ia[4]
----- -----
int int iax+3
----- -----
int int
----- -----
int int
----- -----
*/
ia[0][1] = 100;
printf("%d = %d\n", *(ia[0] + 1), ia[3]);
free(ia);
return 0;
}
3 週前
0 意見:
張貼留言