sysmalloc:断言 ....... 失败。中止(核心转储)

sysmalloc: Assertion ....... failed. Aborted (core dumped)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>



typedef struct a{ 
    char * word ;
    int occurs;
    struct a * left;
    struct a * same;
    struct a * right; } Node; 
    
typedef Node * Node_ptr ;
typedef Node * TriTree ;

void inorder(TriTree x) {
    if(x==NULL) return;
    inorder(x->left);
    printf("%s(%d)--" , x->word, x->occurs);
    inorder(x->same);
    inorder(x->right);
    return;}

void strlower(char * lower){
    for (char *p = lower; *p; ++p) *p = tolower(*p);
    printf("%s\n",lower);
};
// 1
Node_ptr create(char * word){
    Node_ptr tmp_ptr;
    tmp_ptr = (Node_ptr)malloc(sizeof(Node_ptr));
    tmp_ptr-> word = word;
    tmp_ptr-> occurs = 1;
    tmp_ptr-> left = NULL;
    tmp_ptr-> same = NULL;
    tmp_ptr-> right = NULL;
    return tmp_ptr;
}


int main()
{
    char a[]="Stelios";

    strlower(&a);

    Node_ptr tmp;
    
    tmp = create(&a);
    printf(tmp->word);
    return 0;
}

我想写一个关于三叉树的结构和创建节点、插入节点等的方法

当我运行这段代码时,它很好!当我在 main() 中注释行 // strlower(&a) 时,我收到有关内存分配的错误,但我无法识别它。使用 Valgrind 结果对我来说调试它是模棱两可的。你能帮我解决这段特定的代码吗?

这个内存分配

tmp_ptr = (Node_ptr)malloc(sizeof(Node_ptr));

错了。您正在尝试分配大小不正确的内存范围。

尝试

tmp_ptr = (Node_ptr)malloc(sizeof(Node));

tmp_ptr = (Node_ptr)malloc(sizeof( *tmp_ptr ));

这些调用中还有参数表达式

strlower(&a);
tmp = create(&a);

不正确。表达式的类型不是 char *,而是类型 char ( * )[sizeof( a )].

你需要写

strlower( a );
tmp = create( a );