尝试:为什么malloc错误来了

时间:2016-08-12 04:13:10

标签: c pointers struct malloc trie

运行我的尝试程序时,我一直收到错误。

  

a.out:malloc.c:2372:sysmalloc:断言`(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)'失败。

我的代码是:

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

1 个答案:

答案 0 :(得分: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)吗?