<memory无法=“ =” be =“”打印=“”>注意:指针指向此处

时间:2018-08-28 15:23:53

标签: c

我是c语言的初学者。

我正在尝试使用以下代码创建一个简单的哈希表。但是,发生以下错误。任何人都可以向我解释为什么?

运行时错误:类型'struct Node *'存储到未对齐的地址0x0000ffffffff,需要8字节对齐 0x0000ffffffff:注意:指针指向此处 分割错误

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

typedef struct Hashnode
{
    int size;
    struct Node** hashnode;
}Hashtable;


typedef struct Node
{
    char* word;
    struct Node* next;
}Node;

int main(void)
{
    Node* node = malloc(sizeof(Node));
    node->word = "Elvin";
    node->next = NULL;
    printf("First Node created successfully!...\n");

    Hashtable hasht;

    hasht.size = 10;
    for (int i = 0; i < hasht.size; i++)
    {
        hasht.hashnode[i] = NULL;
        printf("the address of the %i hasnode is: %p\n", i, hasht.hashnode[i]);
    }
    printf("The hashtable is created successfully!...\n");

关注问题

更正上面的代码后,我想将hashnode与该节点链接。由于hashnode是Node **(指向node的指针的指针),因此hasnode的值应为node指针的地址(即&node)。我的代码在下面。

但是,这向我显示了一个错误,即从“节点**”(又称为“结构节点**”)分配给“结构节点*”的指针类型不兼容;删除&。

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

typedef struct Hashnode
{
    int size;
    struct Node** hashnode;
}Hashtable;


typedef struct Node
{
    char* word;
    struct Node* next;
}Node;

int main(void)
{
    Node* node = malloc(sizeof(Node));
    node->word = "Elvin";
    node->next = NULL;
    printf("First Node created successfully!...\n");

    Hashtable hasht;

    hasht.size = 10;
    hasht.hashnode = malloc(sizeof(*hasht.hashnode)*hasht.size);
    for (int i = 0; i < hasht.size; i++)
    {
        hasht.hashnode[i] = NULL;
        printf("the address of the %i hashnode is: %p\n", i, hasht.hashnode[i]);
    }
    printf("The hashtable is created successfully!...\n");

    int key = 3;
    hasht.hashnode[key] = &node;
}

知道我做错了什么吗?

1 个答案:

答案 0 :(得分:2)

您忘记初始化指针表:

hasht.size = 10;
// you need to allocate the array of pointers
hasht.hashnode = malloc(sizeof(*hasht.hashnode)*hasht.size);
// now proceed with your loop
for (int i = 0; i < hasht.size; i++)
{

因此,在尝试初始化指针时,您在树林中写了一个未定义的位置:未定义的行为。