gpt4 book ai didi

c - 尝试 : why malloc error came

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

我在运行我的 tries 程序时不断出错。

a.out: malloc.c:2372:sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long) old_end & pagemask) == 0)' failed.

我的代码是:

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

typedef struct nodeData
{
char ch; /* This structure looks like a linked list */
struct nodeData *next;
}node;

typedef struct tries
{
node *start[26];
}tries;

tries *makeAllNull(tries *root)
{
int i=0;
for(i=0;i<=26;i++)
{
root->start[i] = NULL;
}
return root;
}

/* Insert the given string in to the tries */
tries *insert(tries *root,char *str,int len)
{
int i=0;
tries *temp;
temp = (tries *)malloc(sizeof(tries));
while(i<len)
{
int k = str[i] - 'a';
temp->start[k] = (node *)malloc(sizeof(struct nodeData));
temp->start[k]->ch = str[i];
temp->start[k]->next = NULL;
if(temp->start[k] == NULL)
{
root->start[k] = temp->start[k];
}
else{
root->start[k]->next = temp->start[k];
}
i++;

}
return root;
}

int main()
{
int i=0;
tries *root;
root = (tries *)malloc(sizeof(node *));
makeAllNull(root);
char str[30];
while(i<5)
{
scanf("%s",str);
root = insert(root,str,strlen(str));
}
return 0;
}

最佳答案

你的 if(temp->start[k] == NULL)malloc 之后几乎总是假的,这会导致取消引用 NULL 指针在这一行

root->start[k]->next = temp->start[k];

这会破坏内存。

你的意思是 if(root->start[k] == NULL) 而不是 if(temp->start[k] == NULL)

关于c - 尝试 : why malloc error came,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38909792/

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