我正在學習C並有此問題。假設我宣佈下列緩衝:以字節爲單位確定緩衝區的總大小
int n=100, dim=5;
double *buf = calloc(n * dim, sizeof(double));
我怎麼知道總規模這個緩衝區在內存(字節)宣佈?我用下面的方式,但我不知道這是否是正確的邏輯:int buf_size_in_byte= (n)* sizeof(double);
我正在學習C並有此問題。假設我宣佈下列緩衝:以字節爲單位確定緩衝區的總大小
int n=100, dim=5;
double *buf = calloc(n * dim, sizeof(double));
我怎麼知道總規模這個緩衝區在內存(字節)宣佈?我用下面的方式,但我不知道這是否是正確的邏輯:int buf_size_in_byte= (n)* sizeof(double);
除非我失去了一些東西:
BUF本身始終只是要的sizeof(雙*)。
但是你分配的內存量是n * dim * sizeof(double)。
免費(BUF)還應該知道到底有多少,當你用它做但要解除該內存...
'double *'是什麼? (一個指針)。你是正確的(假設你自己的''是'buf'),'buf'(或任何指針)總是'sizeof(一個指針)'(通常是x86上的4個字節或x86_64上的8個字節)。您正在分配一個包含您的數據所需的任何大小的內存塊。 (隨你便)。是'免費'知道。怎麼樣?你有責任保存一個指向buf開頭的指針。如果你這樣做,'free(buf);'知道要釋放什麼...... –
'buf_size_in_byte'應該是類型'size_t',它是:'爲size_t buf_size_in_byte = sizeof(double)* n * dim;'或者更好:'size_t buf_size_in_byte = sizeof * buf * n * dim;' –
@DavidBowling非常感謝 – Medo
想法:使用'buf = calloc(n * dim,sizeof * buf);',那麼不需要知道'calloc()'調用的'buf'類型。更容易編寫,審查和更新。 – chux