【发布时间】:2021-01-13 06:35:36
【问题描述】:
结构看起来像这样。
struct Tree {
int operation;
struct Tree *left;
struct Tree *right;
char *value;
};
接下来,我尝试用这个函数创建一棵树:
struct Tree *new_node(int operation_new, struct Tree *left_new, struct Tree *right_new, char new_value[MAX_LENG]) {
struct Tree *n;
n = (struct Tree *)malloc (sizeof(struct Tree));
if (n == NULL) {
printf("Unable to Malloc New Structure Tree");
exit(1);
}
n->operation = operation_new;
n->left = left_new;
n->right = right_new;
// n->value = (char *)malloc(sizeof(strlen(new_value) + 1)); // -------- ( 1 )
n->value = new_value;
return n;
}
所以,我创建了一棵树并将其打印出来。因此,在打印树时,操作,即整数被正确打印。但是 value 没有正确打印。也就是说,只有在树的末尾输入的值 (node) 会到处打印。值为 字符串 (char *)。所以我用谷歌搜索了这个问题。我找到了这个答案。
Malloc char* 将其存储在 struct
所以我尝试了不同的方法来 malloc 。下面是一些例子。
// This gave me a Segmentation Fault
n->value = (char *)malloc(sizeof(strlen(new_value) + 1));
strcpy(n->value, new_value);
// This gave me a Segmentation Fault
n->value = malloc(sizeof(strlen(new_value) + 1));
strcpy(n->value, new_value);
这些都没有给出准确的结果!您能告诉我如何正确malloc 结构中的字符串吗?
【问题讨论】:
-
N->value=strdup(new_value)
-
并解释一下:
sizeof给出了变量或值的存储大小。你给它的返回值是strlen,通常是 4 或 8 个字节。所以它将返回 4 或 8,你将分配 5 或 9 个字节。只需如前所述直接使用strlen,或使用其他提到的方式strdup,用于创建C 字符串的副本,包括分配内存。 -
@user3121023 抱歉:/您的代码出现分段错误
-
@pm100 也很抱歉:/ 你的代码给出了分段错误
标签: c struct segmentation-fault char malloc