数组项的指针指向错误的地址

时间:2013-12-25 11:15:24

标签: c pointers

我有2个结构如下(WidgetPixmap XWindow 对象):

typedef struct {
    unsigned short id;
    short valid;
    time_t mtime;
} MyEntry;

typedef struct {
    Widget shell;
    Pixmap icon;

    int nentry;
    MyEntry entry[100];
} CoverList;

然后我创建了一个CoverList对象;

CoverList list;

问题是当我尝试获取MyEntry指针时,它总是出错。我尝试获取的指针的地址小于原始指针4.例如,假设list.entry指向0x500004,则MyEntry* ent = &list.entry[0]指向0x500000。

MyEntry* ent = &list.entry[0]; // <= always wrong

因此,我无法访问该对象的任何内容。我想知道我的代码中有什么问题,以及如何修复它?

更新 我尝试使用3种方法来分配该数组,但都给了我错误的结果:

MyEntry ent1 = list.entry[0];
MyEntry *ent2 = &list.entry[0];
MyEntry ent3;
memcpy(&ent3, &list.entry[0], sizeof(MyEntry));

1 个答案:

答案 0 :(得分:-1)

使用括号:

MyEntry* ent = &(list.entry[0]);

没有括号,编译器的代码如下所示:

MyEntry* ent = (&list).entry[0];

编辑:忽略我上面写的内容。

您的代码(经过一些修改)在我的系统上正常运行:

#include <time.h>
#include <stdio.h>

typedef struct {
    unsigned short id;
    short valid;
    time_t mtime;
} MyEntry;

typedef struct {
    int nentry;
    MyEntry entry[100];
} CoverList;

int main()
{
    CoverList list;
    MyEntry* ent = NULL;

    list.entry[ 0 ].id = 0;
    list.entry[ 1 ].id = 1;
    list.entry[ 2 ].id = 2;
    list.entry[ 3 ].id = 3;

    ent = &list.entry[0];

    printf("%u\n", ent->id); // prints 0

    return 0;
}