Re: [問題] 動態配置記憶體
※ 引述《NoobImage (老人家)》之銘言:
: ※ 引述《PcGrek (PcGrek)》之銘言:
: : 推薦另一種動態配置的寫法,
: : 用這種方法配出來的記憶體區塊是連續的,
: : 釋放記憶體時簡單,也可以用 a[x][y] 這種型式的定址法。
: : double** mat = (double**)malloc( h*sizeof(double* )+
: : w*h*sizeof(double));
: : double* x = (double* )(mat + h);
: : for(int y = 0; y!=h ; ++y, x+=w )
: : mat[y] = x;
: : free(mat);
: 解釋一下嗎? P大
: double** mat = (double**)malloc( h*sizeof(double* )+
: w*h*sizeof(double));
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 產生一組 double**型態 大小 h個(double*) + w*h個(double)
: 我們不是要 w*h*(double)就好了嗎?
: 一個double mat[h][w]他的大小 不就只有 h*w*(double)
: 那h*sizeof(double* ) 不就多配置了?
如果是只要配置一維的陣列
那麼原本的 h*w*sizeof(double) 就可以了
double *mat;
┌─┐ ┌──────────┐
mat │───→ │ h*w*sizeof(double) │
└─┘ │ │
│ │
│ │
│ │
如果是要配置二維的陣列
double **mat
┌─┐
mat │││
└│┘
↓
┌─┐ ┌──────────┐
mat[0] │───→ │ h*w*sizeof(double) │
├─┤ │ │
mat[1] │───→ │ │
├─┤ │ │
mat[2] │───→ │ │
├─┤ │ │
↑
└── 這一排就是多出來的 h*sizeof(double*)
原 post 後面的那段
for(int y = 0; y!=h ; ++y, x+=w )
mat[y] = x;
就是要把這一排 pointer array 指到正確的位址上
--
有時候,遺忘,是令人快樂的。什麼時候?當然是有人傷了你的心的時候。
存心傷你的那個人,固然是故意和你過不去,但是被傷了心而耿耿於懷的你
,卻是和自己過不去了。所以,記性不好的人,通常會是比較快樂的人,也
是比較不容易被擊倒的人。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.54
※ 編輯: ledia 來自: 140.112.30.54 (02/12 18:03)
※ 編輯: ledia 來自: 140.112.30.54 (02/12 18:04)
推
02/12 18:05, , 1F
02/12 18:05, 1F
推
02/12 19:40, , 2F
02/12 19:40, 2F
推
02/12 21:20, , 3F
02/12 21:20, 3F
推
02/12 22:02, , 4F
02/12 22:02, 4F
推
02/16 01:07, , 5F
02/16 01:07, 5F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章