سؤال

لا أستطيع أن أفهم هذه النتيجة ...

الرمز:

void foo(void * key, size_t key_sz) {
    HashItem *item = malloc(sizeof(HashItem));

    printf("[%d]\n", (int)key);

    ...

    item->key = malloc(key_sz);
    memcpy(item->key, key, key_sz);
}

void bar(int num) {
    foo(&num, sizeof(int));
}

وأنا أفعل هذه المكالمة: bar(900011009);

لكن ال printf() الإخراج هو:

[-1074593956]

أنا حقا بحاجة key أن أكون مؤشرًا باطلاً ، كيف يمكنني إصلاح هذا؟

هل كانت مفيدة؟

المحلول

أعتقد أنك بحاجة إلى هذا:

printf("[%d]\n", *(int*)key); 

المفتاح هو مؤشر باطل إلى INT ، لذلك تحتاج أولاً إلى الإلقاء على مؤشر INT ، ثم الإطفاء للحصول على int الأصلي.

نصائح أخرى

إذا ألقيت المؤشر إلى int, ، أنت تحصل على عنوان كقيمة. تحتاج إلى dereference void مؤشرات مثل أي شيء آخر. فقط لا يمكنك dereference مباشرة void *, ، لذلك يجب عليك أولاً إلقاءها على مؤشر من النوع الصحيح ، هنا int *. ثم dereference هذا المؤشر ، أي *((int *)key) (أقواس إضافية لتوضيح الأسبقية).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top