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


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 %dn",
           sizeof(books), sizeof(struct BOOK));
    books = (struct BOOK*)malloc(sizeof(struct BOOK) * number);
    printf("sizeofbooks %d n sizeofBOOK %dn",
           sizeof(books), sizeof(struct BOOK));
    free(books);
    return 0;
}

输出为:

before
sizeofbooks 4
sizeofBOOK 440
after
sizeofbooks 4
sizeofBOOK 440

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

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

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

你会看到 malloc 在它不返回 NULL 时工作。

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

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

相关内容

  • 没有找到相关文章