gpt4 book ai didi

c - realloc 函数不会在 c 中保存具有新值的新元素

转载 作者:行者123 更新时间:2023-11-30 20:33:51 25 4
gpt4 key购买 nike

函数获取成绩数组,如果元素少于之前,则更改成绩数量,函数将删除这些元素例如:之前:我在另一个函数中输入了3个成绩:100、90、80。之后:在这个函数中,它要求我输入新的金额,我输入了,然后输入了它的等级,70。当我将它返回到主函数并将数组、成绩发送到打印数组的函数后,它保留 3 个元素:100、90、80。请帮助我,我尝试了很多时间但没有成功。

void changeNumOfGrades(int* grades, int size)
{
int numOfGrades = 0;
int i = 0;
do
{
if (i > ONE_ITERATION)
{
printf("Please enter positive number...\n");
}
printf("How many elements would you like? ");
scanf("%d", &numOfGrades);
i += 1;
} while (numOfGrades < 0);
grades = realloc(grades, numOfGrades*sizeof(int));
if (!grades)
{
printf("Unsuccessful realloc");
//There is no need to release memory because the realloc is for the same pointer.
}
if (numOfGrades > size)
{
printf("You have more grades than before,\nPlease enter their grades: \n");
int newGrade = 0;
//int newNumOfGrades = numOfGrades - size;
int i = 0;
for (i = size + 1; i <= numOfGrades; i++)
{
printf("Enter grade number %d: ", i);
scanf("%d", &newGrade);
*(grades + i - 1) = newGrade;
printf("hey %d", *(grades + 1));
}
}

}

最佳答案

为了重新分配成绩,您需要以 **grades 形式传递。出于测试原因,我更改了 size 来获取新的分配大小,因此您可以在changeNumOfGrades 之后打印数组

void changeNumOfGrades(int** grades, int *size/*get new size*/)
{
int numOfGrades = 0;
int i = 0;
do
{
if (i > ONE_ITERATION)
{
printf("Please enter positive number...\n");
}
printf("How many elements would you like? ");
scanf("%d", &numOfGrades);
i ++;
} while (numOfGrades < 0);
printf("%d",numOfGrades);
*grades = realloc(*grades, numOfGrades*sizeof(int));/*realloc **grade */
if (!grades)
{
printf("Unsuccessful realloc");
//There is no need to release memory because the realloc is for the same pointer.
}
printf("...\n");
if (numOfGrades > *size)
{
printf("You have more grades than before,\nPlease enter their grades: \n");
int newGrade = 0;
//int newNumOfGrades = numOfGrades - size;
int i = 0;
for (i = *size + 1; i <= numOfGrades; i++)
{
printf("Enter grade number %d: ", i);
scanf("%d", &newGrade);
*(*grades + i - 1) = newGrade;
//printf("hey %d", *(grades + 1));
}
}
*size = numOfGrades;/*get new size allocated*/

}

void main()
{
int numOfInts;
int *grades ;
grades = malloc(3*sizeof(int));
memset(grades,0,sizeof(int)*3);
grades[0]=100;
grades[1]=80;
grades[2]=20;
numOfInts = 3;/*initialize 3 items*/
changeNumOfGrades(&grades,&numOfInts);
printf("\n\n");
for (int i=0;i<numOfInts;i++)
{
printf("%d\n",grades[i]);
}
free(grades);
}

关于c - realloc 函数不会在 c 中保存具有新值的新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43955394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com