gpt4 book ai didi

C、calloc自动处理溢出?

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:26 27 4
gpt4 key购买 nike

matrix* make_matrix(size_t width, size_t height, size_t k, options opt){

matrix *m= malloc(sizeof(matrix));
if(m==NULL) return NULL;

m->width = width;
m->height = height;
m->k = k;

/*
Since m->data is a int **, it points to int *,
so I have to allocate a number of int *-sized objects to store in it.
*/
//m->data = malloc(sizeof(int *)*height);
m->data = calloc(height, sizeof(int*));

if(m->data == NULL){
free(m);
return NULL;
}

for(size_t i=0; i < height; i++){
//m->data[i] = malloc(sizeof(int)*width);
m->data[i] = calloc(width, sizeof(int));

if(m->data[i] == NULL){
for(size_t j = 0; j < i; j++) free(m->data[j]);
free(m->data);
free(m);
return 0;
}
/*
for(size_t j = 0; j < width; j++){
m->data[i][j] = 0;
}*/
}

return m;
}

我正在生成一个二维数组,我使用 malloc 而不是 calloc。事实证明,这将是一个稀疏矩阵,其中大部分元素将为零。所以我决定使用calloc。我的问题是我还需要保留 if 语句吗

        if(m->data[i] == NULL){
for(size_t j = 0; j < i; j++) free(m->data[j]);
free(m->data);
free(m);
return 0;
}

我写这个是因为 malloc 不处理堆栈溢出问题,所以如果它失败,我必须以相反的顺序释放这些 block 。我是否仍将此代码保留在 calloc 中?

最佳答案

是的。 calloc 可能(并且将会)像 malloc 一样失败。

关于C、calloc自动处理溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com