gpt4 book ai didi

c - 从另一个函数调用构造函数时的存储持续时间

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:36 25 4
gpt4 key购买 nike

我有一个看起来像这样的结构:

struct matrix {
size_t nrow;
size_t ncol;
double *data;
};

和相应的构造函数:

struct matrix *matrix_create(const size_t nrow, const size_t ncol)
{
struct matrix *m;

m = malloc(sizeof(struct matrix));
if (!m) {
fprintf(stderr, "Memory allocation failed\n");
return NULL;
}
m->data = malloc(sizeof(double) * nrow * ncol);
if (!m->data) {
fprintf(stderr, "Memory allocation failed\n");
return NULL;
}

m->nrow = nrow;
m->ncol = ncol;

return m;
}

现在假设我想要另一个调用构造函数并返回指向 struct 的指针的函数:

struct matrix *matrix_dostuff(const struct matrix *m1, const struct matrix *m2)
{
struct matrix *dostuff =
matrix_create(m1->nrow * m2->nrow, m1->ncol * m2->ncol);

/* do stuff */

return dostuff;
}

这种定义明确的行为是否保证函数返回后存在 dostuff

最佳答案

是的,这不是未定义的行为。

在您的代码中,dostuff 持有由 malloc() 返回的指针。它的生命周期一直持续到手动释放为止,例如使用 free()。因此,返回 dostuff 并在以后使用它就很好。

关于c - 从另一个函数调用构造函数时的存储持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31588758/

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