c语言中具有指针数组的结构体

Structure having an array of pointers in c

本文关键字:数组 结构体 指针 语言      更新时间:2023-10-16

我正在c中实现多位trie,我正在获得分段错误。当我运行程序时。我不知道哪里出了问题?

多比特树的节点如下:

struct MtNode{
        /* nodes is an array 8 elements. Each element is a pointer to its child node.*/
        MtNode* nodes[8];  // 2^stride = 2^3 = 8
        int   nexthop;
    };

每个节点按如下方式初始化:

typedef MtNode node;
node *init_mtnode(){
    node *ret = (node*) malloc(sizeof(node));   
    int size = (int)pow(2,STRIDE);
    for (int i=0; i<size ; ++i)
    {
           ret->nodes[i] = NULL;
    }    
    ret->nexthop = -1;
    return ret;
}

init_mtnode方法有什么问题吗?

可能有多种原因:

  1. 您不检查malloc()NULL,不像new会抛出异常,malloc()将返回NULL如果发生错误。

  2. 你计算size的值,然后循环size次,但是你的数组只能保存8指针

试试这个

typedef MtNode node;
node *init_mtnode()
{
    node *ret;
    int size;
    ret = static_cast<node *>(malloc(sizeof(node)));
    if (ret == NULL) /* check for NULL */
        return NULL;
    size = 2 << STRIDE;
    if (size >= 8)
        size = 7; /* maximum possible value */
    for (int i = 0 ; i < size ; ++i)
        ret->nodes[i] = NULL;
    ret->nexthop = -1;
    return ret;
}