【发布时间】:2014-01-30 22:33:34
【问题描述】:
例如,在计算树的高度时,请参见 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不知道也不关心类型。如果你在某个时候分配了资源,你应该释放它。 -
任何你使用 malloc 或 new 或 new[] 的东西,最终都必须分别使用 free 或 delete 或 delete[]。
-
“如果你使用正确的操作系统”——如果 OP 使用了正确的 算法,就不需要 malloc 或 free ...该数组毫无意义。
-
@R..是的,假装什么都不会出错是不好的......但这些都是有效的工具,应该明智地使用。
标签: c++ c arrays dynamic primitive