0

我定义了一个结构。

typedef struct bucket {
    char *key;
    void *value;
    struct bucket *next;
} Bucket;

该函数在名为“htable.h”的文件中定义。

int put(Table *table, const char *key, void *value) {

    Bucket insertBucket;
    strcpy(insertBucket.key, key);

    return 0;
}

这不应该是有效的吗?

4

2 回答 2

3

问题是您没有为字符指针分配任何内存,key并且您正在尝试将字符串复制到它。它给你未定义的行为。
key只是一个未初始化的字符指针,它只是指向一个随机地址。要能够使用任何指针,有两个条件:

  1. 它应该指向一个有效的内存区域 &
  2. 应该保留内存供您使用(应该拥有)

你违反了两者。

于 2013-10-26T06:22:02.997 回答
1

您需要分配一些空间来存储您的字符串。现在你只有一个原始指针。像这样的东西:

char dest[80]; // arbitrary amount of space for example
strcpy(dest, key);

理想情况下,您希望在您的内部执行此操作struct

typedef struct bucket {
  char key[80];
  // .. other members ..
} Bucket;
于 2013-10-26T06:23:27.390 回答