【发布时间】:2013-02-24 00:46:36
【问题描述】:
我正在进行一个项目,我正在尝试使用malloc() 和realloc()。我知道当我 malloc 时,它可以工作,但是当我使用 realloc 时,它根本不会改变分配的内存量。我一直认为 realloc 会重新分配你已经分配的内存。
这是我所拥有的:
这包括:
#include <stdlib.h>
我有一个结构:
struct student {
int age;
int numOfClasses;
int gender; //0 male; 1 female
} student;
当我想使用 malloc 制作其中的 7 个结构时,我将使用这行代码:
student stud* = (structure*) malloc(7*sizeof(student));
这条线有效。那行代码将结构的大小乘以 7。简而言之,这将占用足够的内存来创建一个由 7 个结构组成的数组。
现在,如果我想将其更改为 8,我会这样做,其中 A 是先前分配的内存,B 是新的分配(或重新分配)的内存:
这是我在代码中的方式:
stud = (student*)realloc(stud, 8*sizeof(student));
据我所知,realloc 采用第二个参数中的变量并分配该内存量。然后,它获取指针(或先前分配的),并从给定的指针中尽可能多地填充刚刚分配的内存。当然,第二个参数必须比之前的 malloced size 大,否则stud最后会丢失一些内存。现在这就是我的问题所在。当我调用上面的行时,它不会改变任何东西。 malloced 数组的长度仍然为 7。我也很确定我有足够的内存来重新分配。
我这样做对吗?我的问题可能出在哪里?
【问题讨论】:
-
是什么让你认为 malloced 数组的长度仍然是 7?
-
这与您的问题无关,但我认为您的结构非常适合
enum。