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は単なる初期化されていない文字ポインターであり、ランダムなアドレスを指すだけです。任意のポインターを使用できるようにするには、次の 2 つの条件があります。

  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 に答える