c-为什么我需要初始化MacOs上malloc的结果



我实现了一个C计算器来分析输入。我有一个结构(像链表(,但在macOS上,我必须通过init_null函数初始化,或者像变量一样的值有一个初始值。我只有一个问题:为什么?

在Linux上,没有任何问题。

typedef struct node_t {
int value;
char operator;
struct node_t *left;
struct node_t *right;
} node_t;
node_t *init_null(node_t *root) {
root->value = NULL;
root->operator = NULL;
root->left = NULL;
root->right = NULL;
return root;
}
node_t *build_tree(const char *argv[], int *position) {
node_t *new = malloc(sizeof(node_t));
new = init_null(new); /*sinon erreur*/
if (isdigit(*argv[*position])) {
new->value = atoi(argv[*position]);
} else/*Opérateur*/  {
new->operator = *argv[*position];
*position = *position + 1;
new->left = build_tree(argv, position);
*position = *position + 1;
new->right = build_tree(argv, position);
}
return new;
}

运行时,./main * 2 + 3 4应打印(2 * (3 + 4))

问题如下:

至少有两种内存分配方法可以使用,malloccalloc。不同之处在于malloc不会将成功分配的内存初始化(或设置(为任何内容。正如@EricPostpischill所解释的,内存块上有一个不确定的显式或隐式影响,这是在这种编译状态下编译器特有的。

而CCD_ 6将成功分配的存储器块设置为零。请注意,这些论点略有不同。

回到您的担忧,在Linux中,malloc只是碰巧分配了一块内存,而在macos平台上,内存中有一些东西。

如果需要,请使用calloc,否则对分配的内存块执行0的memset

相关内容

  • 没有找到相关文章

最新更新