我试图将矩阵的创建包装成一个函数,但在理解从书中提取的以下代码片段时遇到了问题:
// An error checked malloc() wrapper function
void *ec_malloc(unsigned int size) {
void *ptr;
ptr = malloc(size);
if(ptr == NULL)
fatal("in ec_malloc() on memory allocation");
return ptr;
}
我已经检查了这个问题:
我是否投射malloc的结果?
现在我没有必要公布结果了。但我不明白的是,在没有sizeof
运算符的情况下使用malloc(size)
。例如,为了创建一个矩阵,比如int **matrix
,我也创建了这个函数:
// An error checked malloc() wrapper function
void **double_ec_malloc(unsigned int size) {
void **ptr;
ptr = malloc(size);
if(ptr == NULL)
fatal("in ec_malloc() on memory allocation");
return ptr;
}
然后我做:
int **matrixA = double_ec_malloc(size);
int i = 0;
for (i = 0; i < size; i++){
matrixA[i] = ec_malloc(size);
malloc
的man
说:
malloc()函数分配大小字节,并返回一个指向已分配内存的指针。
设size
为4
,则在ptr = malloc(size)
中我分配4个字节,但如果矩阵类型为int
。我不需要sizeof int * 4
吗?因为现在我认为我没有为一个整数矩阵分配足够的内存。
由于ec_malloc()
不接受数据类型参数,因此它假设您将自己执行sizeof(datatype) * size
。因此,参数unsigned int size
应该以字节为单位。
请注意,这正是malloc()
本身的行为方式。
malloc
函数(和您的ec_malloc
)都分配一个长度为size
字节的线性字节区域。
sizeof
只是返回一个int
,它与malloc
没有任何关系(除了它经常与malloc
一起使用)。
32位整数的长度为4字节。CCD_ 22返回4。如果你想要4个int
的空间,你会说malloc( sizeof(int) * 4 )
。