【问题标题】:why malloc doesnot work in my c program? [duplicate]为什么 malloc 在我的 c 程序中不起作用? [复制]
【发布时间】:2014-01-09 08:46:35
【问题描述】:
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 位,我使用代码块。

【问题讨论】:

  • 你没有做错什么,你只是误解了事情的运作方式。指针不是数组。
  • @JeffRSon:我更喜欢那个骗子,因为它更类似于这个问题(并且答案非常适用)。
  • 请注意,typedef struct { ... } Book; 将避免一直写struct。把它当作一个“类”很好。

标签: c malloc sizeof


【解决方案1】:

alternative : 可以使用 struct BOOK 数组,即 struct BOOK books[5000];

【讨论】:

  • 那么我将如何投书[]=malloc(sizeof(struct BOOK)*no);
  • 您不必这样做,因为书籍[5000] 将分配内存
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    当 malloc 不返回 NULL 时,您会看到它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2018-01-05
      • 2015-12-08
      • 1970-01-01
      相关资源
      最近更新 更多