#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; }
4 年前
0 意見:
張貼留言