Possible Duplicate:
Using Dynamic Memory allocation for arrays
我最初有这个程序存储数量大小为 10 的价格,并意识到我想让程序更加动态,因为我可能需要在某个给定点存储超过 10 个项目。我很难理解如何重新分配额外的内存,以便我可以存储我需要的任意数量的项目。这是处理这项任务的正确方法吗?
主要功能:
double *purchases = (double*)malloc(QUANTITY_SIZE);
外部函数
double startShopping(double *purchases, double *taxAmount, double *subTotal, double *totalPrice)
{
double itemPrice = 0.00;
double* storeMoreItems;
for(int i = 0; i < QUANTITY_SIZE; *subTotal +=purchases[i++])
{
while(itemPrice != -1)
{
printf("Enter the price of the item :");
scanf("%lf", &itemPrice);
storeMoreItems = (double*)realloc(storeMoreItems, i * sizeof(int));
if(storeMoreItems != NULL)
{
storeMoreItems = purchases;
purchases[i-1] = itemPrice;
}
else
{
free(purchases);
}
}
}
displayCart(purchases);
*taxAmount = *subTotal * TAX_AMOUNT;
*totalPrice = *taxAmount + *subTotal;
printf("\nTotal comes to : $%.2lf\n", *totalPrice);
return *totalPrice;
}
最佳答案
double* purchases = (double*)malloc(sizeof(double)*QUANTITY_SIZE);
更重要的是:
storeMoreItems = (double*)realloc(storeMoreItems, i * sizeof(double));
您尝试分配i*sizeof(int)
然后将其转换到 double*
。当double
和int
具有不同的大小,您的代码将很难发现错误。
接下来的事情:
何时 i
等于 0 您分配初始大小为 0 字节的内存 ( i*sizeof(int)
),然后尝试使用它。这是行不通的。尝试以这种方式更改循环:for (int i = 1, i <= QUANTITY_SIZE;...
并保留purchases[i-1]
.
关于c - 数组的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14060057/