gpt4 book ai didi

c - 尝试分配内存时的 sysmalloc

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:57 26 4
gpt4 key购买 nike

sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed. Aborted (core dumped)

即使我没有调用函数 free()

我正在使用 gcc 编译器。

主.c

#include <stdio.h>
#include <stdlib.h>
#include "types.h"
#include "functionality.h"

int main(){
BTNode root=NULL,tmp;

root=BTCreate();

BTInsertLeft(root,'c');
return 0;
}

功能.c

#include <stdio.h>
#include <stdlib.h>
#include "types.h"

BTNode BTInsertLeft(BTNode node,BTItem item){
node->left=malloc(sizeof(BTNode));
BTNode tmp=node->left;
tmp->left=NULL;
tmp->right=NULL;
tmp->item=item;
tmp->parent=node;
return tmp;
}

BTNode BTCreate(){
BTNode root=malloc(sizeof(BTNode));
root->item='a';
root->right=NULL;
root->left=NULL;
root->parent=NULL;
return root;
}

类型.h

typedef char BTItem;
struct treenode{
BTItem item;
struct treenode *left;
struct treenode *right;
struct treenode *parent;
};
typedef struct treenode TREENODE;
typedef TREENODE *BTNode;

功能.h

BTNode BTCreate();
BTNode BTInsertLeft(BTNode node,BTItem item);

最佳答案

您没有在 BTCreate() 中分配足够的空间。 sizeof(BTNode) 是指针的大小,而不是 treenode 结构的大小。应该是:

BTNode root = malloc(sizeof(*root));

BTNode root = malloc(sizeof(TREENODE));

一般规则是 malloc() 调用中 sizeof() 的类型参数应该与类型相同你分配给的变量。它应该是指针指向的类型,即它应该比变量的类型少一个 *,或者你可以使用 *variable 来引用它的值指向。

typedef 指针通常也是一个坏主意。参见 Is it a good idea to typedef pointers? .您使用的名称 BTNode 是它引起混淆的一个很好的例子;你称它为“节点”,但它实际上不是节点,它是指向节点的指针。您应该使用像 BTNodePtr 这样的名称,但是当您只说 TREENODE * 就很清楚时,这样做有什么意义呢?

关于c - 尝试分配内存时的 sysmalloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55542672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com