我有奇怪的程序行为,当试图从一个结构中读取一个值后,给它赋值。下面我将展示相关的结构和功能:

/*Data struct for cor_entry */
struct cor_entry {
    struct cor_entry * pre_entry;
    struct cor_entry * next_entry;
    long long unsigned int entry_data;
};

我已经注释掉了我的大部分功能来强调这个问题:
/* update correlation table */
void cor_table_update(long long unsigned int cor_table_data,
    struct cor_entry **cor_table_head_ptr,
    struct cor_entry **cor_table_tail_ptr,
    int *entry_num,
    const int MAX_NUM)
{
    struct cor_entry *cor_table_entry;
    int cor_hit=0;

    //test code
    //cor_table_head=cor_table_tail=(struct cor_entry*)calloc(1, sizeof(struct cor_entry));
    //printf("original cor_entry_num=%d\n",*entry_num);

    ////////////////////////code for test///////////////////////////////

    cor_table_entry=(struct cor_entry*)calloc(1, sizeof(struct cor_entry));
    printf("The cor_table_entry=%x\n",cor_table_entry);
    cor_table_entry->entry_data=cor_table_data;
    if (cor_table_entry->entry_data==cor_table_data)
    {
        printf("The assignment is correct!\n");
        printf("the cor_enrty_data=%x, stored data=%x,\n",
            cor_table_data,
            cor_table_entry->entry_data);
    }

    // ... rest of function
}

我在运行程序时得到这个输出:
cor_table_条目=8c09a58
作业正确!
cor_enrty_data=8ffc8,存储数据=0,
cor_table_条目=8c09a70
作业正确!
cor_enrty_data=8ffc8,存储数据=0,
cor_table_条目=8c09a88
作业正确!
cor_enrty_data=8ffc8,存储数据=0,
cor_table_entry=8c09ae8
有人能解释一下这个问题吗?我正在使用GCC-3.4.6编译器。

最佳答案

尝试用-Wall编译。GCC应该告诉您%格式说明符和printf()参数的大小不匹配。尝试%llx而不是%x。这应该能解决问题。

07-27 15:19