c - 数组的内存分配

标签 c memory dynamic

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* 。当doubleint具有不同的大小,您的代码将很难发现错误。

接下来的事情:

何时 i等于 0 您分配初始大小为 0 字节的内存 ( i*sizeof(int) ),然后尝试使用它。这是行不通的。尝试以这种方式更改循环:for (int i = 1, i <= QUANTITY_SIZE;...并保留purchases[i-1] .

关于c - 数组的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14060057/

相关文章:

c - GCC x86 内联汇编中的 (+r) 与 (=r) 约束

c - 如何在字符中显示一个词?

c++ - 非常简单的程序通过了 VS2010 c++ 内存泄漏检查器,但在销毁所有对象后在程序结束时仍然使用更多内存?

Android:获取触发onclick事件的元素

c - 从C中的文件读取数据开头的大数字

c++ - 如何使用指针从不同的函数访问局部变量?

c++ - 给定起始地址和大小访问内存中的图像

c++ - 我的代码中是否存在内存泄漏?

mysql - 使用基于动态字段的 DATE_SUB()

JavaFX、TableView、编辑后动态更新Item