【发布时间】:2018-07-24 17:24:22
【问题描述】:
在我创建的函数中,我是否尝试动态分配一个 int 数组来存储一些索引值。 首先,我使用 malloc 函数创建 int *,然后让循环在其中存储 som 值并每次递增指针。 当我尝试使用 realloc 来增加内存分配时,我遇到的问题就开始了。 当我这样做时,VS 告诉我它会遇到未定义的行为并破坏程序。
代码如下所示
void showAvailable(CabinHolder *holder, Booking *booking)
{
system("cls");
printf("Choose cabin number \n");
printf("Start week: &d \t End week: %d", booking->rentPeriod[0], booking->rentPeriod[1]);
printf("------------------------------------------\n");
int memory = 5;
int *indexOfCabin = (int *)malloc(sizeof(int)*memory);
int counter = 1;
for (int i = 0; i < CABINS; i++)
{
if (counter == memory)
{
memory *= 2;
int *expanded = realloc(indexOfCabin, (memory * sizeof(int)));
indexOfCabin = expanded;
expanded = NULL;
}
if (booking->cabin->typeOfCabin == holder->arrofCabin[i].typeOfCabin)
{
printf("%d. \t Cabin with number %d \t cost: %d per week\n", counter, holder->arrofCabin[i].nr, holder->arrofCabin[i].cost);
counter++;
indexOfCabin = &i;
indexOfCabin++;
}
}
free(indexOfCabin);
system("pause");
}
当我在 VS 中调试时,我还发现我的指针 indexOfCabin 在 if 语句中似乎没有定义,我不明白。 我在这里错过了什么?
【问题讨论】:
-
@user3386109 实际上 realloc 会在需要时负责释放旧内存:en.cppreference.com/w/c/memory/realloc
-
@anderssinho 请阅读 realloc 的文档。该说法不正确
-
indexOfCabin可以像数组一样使用,例如indexOfCabin[counter] = i;。但是counter需要从0开始,使用后应该递增。并且indexOfCabin不应该增加。 -
@user3386109 啊 ofc。如果有任何问题,我会尝试并复出。谢谢
标签: c pointers malloc dynamic-memory-allocation realloc