C-使用malloc创建一个int *,然后在满满时使用Realloc



在我创建的函数中,我试图动态分配一个int数组以存储一些索引值。

首先,我使用malloc函数创建int *,然后让循环存储在其中,并每次递增指针。当我尝试使用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 weekn", counter, holder->arrofCabin[i].nr, holder->arrofCabin[i].cost);
            counter++;
            indexOfCabin = &i;
            indexOfCabin++;
        }
    }
    free(indexOfCabin);
    system("pause");
}

当我在vs中进行调试时,我还认为我的指针索引cobin似乎在IF语句中不确定,我不明白。我在这里错过了什么?

好的,在评论部分我解决了该编辑的代码段的问题。

void showAvailable(CabinHolder *holder, Booking *booking)
{
    system("cls");
    printf("Choose cabin number n");
    printf("Start week: %d t End week: %dn", booking->rentPeriod[0], booking->rentPeriod[1]);
    printf("------------------------------------------n");
    int memory = 5;
    int *indexOfCabin = malloc(sizeof(int)*memory);
    int counter = 1;
    int items = 0;
    int choice = 0;
    for (int i = 0; i < CABINS; i++)
    {
        if (counter-1 == memory)
        {
            memory *= 2;
            indexOfCabin = realloc(indexOfCabin, (memory * sizeof(int)));
        }
        if (booking->cabin->typeOfCabin == holder->arrofCabin[i].typeOfCabin)
        {
            printf("%d. t Cabin with number %d t cost: %d per weekn", counter, holder->arrofCabin[i].nr, holder->arrofCabin[i].cost);
            counter++;
            indexOfCabin[items++] = i;
        }
    }
    free(indexOfCabin);
    system("pause");
}

首先:问题是索引卡宾=&amp;我扔掉了您分配的内存,并将i的地址放入指针中,而不是我想做的。现在我们将索引存储在指针中。

第二:索引卡宾可以像数组一样使用,例如索引卡宾[counter] = i;。但是计数器需要从0开始,并且应在使用后增加。不应增加索引卡宾

相关内容

最新更新