gpt4 book ai didi

c++ - 在 C 中,free()'ing 动态分配的原始数组是必要的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:08:17 25 4
gpt4 key购买 nike

例如,计算树的高度时,参见int *heights = malloc(sizeof(int)...)。它是递归的,所以如果有内存泄漏,它会随着一棵大树而变大。我知道一般规则是对每个 malloc 使用 free(),但这是否也适用于动态分配的基本类型?

typedef struct EQTNode {
EQPos *pos;
int genNumber;
struct EQTNode * parent;
int numberOfPossibleMoves;
struct EQTNode ** children;
} EQTNode;

...

int EQTN_getHeight(EQTNode *node, int depth){
if (node != NULL){
int n = node->numberOfPossibleMoves;
int *heights = malloc(sizeof(int) * n);
for (int i = 0; i < n; i += 1){
heights[i] = EQTN_getHeight(node->children[i], depth + 1);
}
int max = 0;
for (int i = 0; i < n; i += 1){
if (heights[i] > max){
max = heights[i];
}
}
return max;
} else {
return depth;
}
}

最佳答案

除了你分配的东西的类型与你是否需要释放它无关之外,根本不需要 malloc/free:

if (node != NULL){
int n = node->numberOfPossibleMoves;
int max = 0;
for (int i = 0; i < n; i++){
int height = EQTN_getHeight(node->children[i], depth + 1);
if (max < height)
max = height;
}
return max;
}

关于c++ - 在 C 中,free()'ing 动态分配的原始数组是必要的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21069962/

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