我正在学习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