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 );
#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 );