重新分配最简单的方法
Easiest way to realloc
我只是好奇重新分配内存的最简单方法是什么?
在我的教职员工中,我们使用此代码重新分配内存(示例):
if (dat = fopen(argv[1], "rb")) {
do {
p = fread(&art, sizeof(ARTIKAL), 1, dat);
if (p) {
if (n == c) niz = (ARTIKAL *)realloc(niz, (c *= 2) * sizeof(ARTIKAL));
niz[n++] = art;
}
} while (p);
fclose(dat);
我正在考虑使用倒带功能,但我不是 100% 确定如何实现它。
为什么在此示例中需要 rewind()
函数?
你的例子看起来不错,有一点可以改进:
if (dat = fopen(argv[1], "rb")) {
do {
p = fread(&art, sizeof(ARTIKAL), 1, dat);
if (p) {
if (n == c)
{
ARTIKAL *tmp = (ARTIKAL *)realloc(niz, (c *= 2) * sizeof(ARTIKAL));
if (tmp == NULL)
{
printf("Not enough memory!\n")
return 0;
}
else
{
niz = tmp;
}
niz[n++] = art;
}
} while (p);
fclose(dat);
购买添加以上内容,您的代码更安全,因为 realloc
returns NULL
当分配失败时 space,然后您会丢失数据。
我只是好奇重新分配内存的最简单方法是什么? 在我的教职员工中,我们使用此代码重新分配内存(示例):
if (dat = fopen(argv[1], "rb")) {
do {
p = fread(&art, sizeof(ARTIKAL), 1, dat);
if (p) {
if (n == c) niz = (ARTIKAL *)realloc(niz, (c *= 2) * sizeof(ARTIKAL));
niz[n++] = art;
}
} while (p);
fclose(dat);
我正在考虑使用倒带功能,但我不是 100% 确定如何实现它。
为什么在此示例中需要 rewind()
函数?
你的例子看起来不错,有一点可以改进:
if (dat = fopen(argv[1], "rb")) {
do {
p = fread(&art, sizeof(ARTIKAL), 1, dat);
if (p) {
if (n == c)
{
ARTIKAL *tmp = (ARTIKAL *)realloc(niz, (c *= 2) * sizeof(ARTIKAL));
if (tmp == NULL)
{
printf("Not enough memory!\n")
return 0;
}
else
{
niz = tmp;
}
niz[n++] = art;
}
} while (p);
fclose(dat);
购买添加以上内容,您的代码更安全,因为 realloc
returns NULL
当分配失败时 space,然后您会丢失数据。