为什么malloc在我的c程序中不起作用?

时间:2013-12-20 13:15:06

标签: c malloc sizeof

struct BOOK
{
    char name[120];
    char author[120];
    int  year[50];
};

int main (void)
{
    int          i;
    int          number;
    struct BOOK* books;

    number = 50000;

    printf("before \nsizeofbooks %d \n sizeofBOOK %d\n",
           sizeof(books), sizeof(struct BOOK));

    books = (struct BOOK*)malloc(sizeof(struct BOOK) * number);

    printf("sizeofbooks %d \n sizeofBOOK %d\n",
           sizeof(books), sizeof(struct BOOK));

    free(books);
    return 0;
}

输出是:

before
sizeofbooks 4
sizeofBOOK 440
after
sizeofbooks 4
sizeofBOOK 440

它总是输出4,即使我写入不同的数组,但我希望它会改变。我做错了什么?

我的操作系统是winxp 32位,我使用的是代码块。

3 个答案:

答案 0 :(得分:7)

books是一个指针,其大小为4.您无法读取动态创建的“数组”的大小。

当它没有返回NULL时,你会看到malloc有效。

答案 1 :(得分:3)

它打印4,因为它是books的大小(即指针的大小)。

答案 2 :(得分:0)

替代方案:您可以使用struct BOOK数组,即struct BOOK books [5000];