带有嵌套结构的代码——分配内存的正确方法是什么?

芥末

我写了这段代码 (*pdata)->pProd = (Product*)malloc(sizeof(Product)*size1);

当我在“ (*pdata)->pProd”中输入详细信息时,编译器停止了。如何为“ Product* pProd分配内存并输入详细信息?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
    char name[30];
    int amount;
    int price;
}Product;

typedef struct
{
    int id;
    Product* pProd;
    int numProd;
}Cart;

void InitCashReg(Cart** pdata) {
    int size,size1,j=0,i;
    int PriceAllProd=0;

    printf("Enter number of client --> \n");
    scanf("%d", &size);

    printf("Enter number of product client bought --> \n");
    scanf("%d", &size1);

    *pdata = (Cart*)malloc(sizeof(Cart)*size);
    if (*pdata == NULL)
    {
        printf("cannot allocate memory\n");
        return -1;
    }
    (*pdata)->pProd = (Product*)malloc(sizeof(Product)*size1);
    if ((**pdata).pProd == NULL)
    {
        printf("cannot allocate memory\n");
        return -1;
    }

    …
乔纳森·莱夫勒

其中一条评论说:

我需要size1为每个size客户分配产品空间,然后为每个客户输入产品的详细信息。

第一件事:

  • 将 I/O 查找大小与使用它们的代码分开。这是编程中的一项基本技术。

一个函数应该做一项工作——你的(至少)做两项工作:获取大小,并为给定这些大小的数据分配空间(然后可能继续用更多的 I/O 操作填充空间)。

这意味着您的代码应至少拆分为两个函数,其中第二个函数变成类似bool InitCashReg(size_t n_client, size_t n_prod, Cart **pdata),返回成功/真或失败/假状态,并将您调用的sizesize1作为参数而不是试图读取它们。我不会复制 I/O 代码;我将只专注于内存分配代码。

enum { CLIENT_DEFAULT_ID = -1 };

bool InitCashReg(size_t n_client, size_t n_prod, Cart **pdata)
{
    Cart *cart = malloc(sizeof(*cart) * n_client);
    if (cart == 0)
        return false;
    for (size_t i = 0; i < n_client; i++)
    {
        cart[i]->pProd = calloc(sizeof(*cart[i]->pProd), n_prod);
        if (cart[i].pProd == 0)
        {
            // Release already allocated space
            for (size_t j = 0; j < i; j++)
                free(cart[j]->pProd);
            free(cart);
            return false;
        }
        cart[i].numProd = n_prod;
        cart[i].id = CLIENT_DEFAULT_ID;
    }
    *pdata = cart;
    return true;
}

此代码尚未编译,更不用说测试了。

我曾经calloc()分配产品数组,以便数据全部归零;您可以malloc()改用并将name,amountprice变量设置为0其他方式。请注意,这与本发明一起CLIENT_DEFAULT_ID确保所有分配的内存都初始化为已知值。

(C++ 具有可用于确保正确初始化的构造函数。C 没有构造函数,因此您必须确保已正确初始化分配的数据。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

嵌套结构内存分配

来自分类Dev

TensorFlow中的嵌套结构是什么?

来自分类Dev

如何使用带有嵌套结构和最少代码更改的boost :: serialization?

来自分类Dev

C中带有指针的嵌套结构

来自分类Dev

带有负载库Matlab的嵌套结构

来自分类Dev

C中带有指针的嵌套结构

来自分类Dev

带有负载库Matlab的嵌套结构

来自分类Dev

带有嵌套结构(集合)条件的 Mongo 查询

来自分类Dev

Spark Dataframe - 如何操作带有嵌套结构的行?

来自分类Dev

带有向量的分配结构的内存泄漏

来自分类Dev

数组未正确生成嵌套结构

来自分类Dev

为什么允许命名嵌套结构?

来自分类Dev

链接到带有参数的路由的正确方法是什么?

来自分类Dev

在内存中如何排列具有不同对齐方式的嵌套结构?

来自分类Dev

带有 malloced 嵌套结构的 fwrite 和 fread 没有预期的行为

来自分类Dev

这如何正确表示给定的嵌套结构[SICP]?我想念什么?

来自分类Dev

在C中为不同的数据类型分配内存的正确方法是什么?

来自分类Dev

具有嵌套结构的动态数组

来自分类Dev

具有嵌套结构的动态数组

来自分类Dev

clojure-为什么此代码会转置嵌套结构

来自分类Dev

clojure-为什么此代码会转置嵌套结构

来自分类Dev

protoc-c:带有可选字符串的嵌套结构抛出seg错误

来自分类Dev

正则表达式带有特殊字符的嵌套结构

来自分类Dev

从C ++到带有联合的嵌套结构C#封送处理

来自分类Dev

从C ++到带有联合的嵌套结构C#封送处理

来自分类Dev

从C ++到带有联合的嵌套结构C#封送处理

来自分类Dev

如何在C中使用带有嵌套结构的指定init?

来自分类Dev

python和ctypes访问带有嵌套结构的c++类

来自分类Dev

从python中的嵌套结构中构建带有pandas的数据框

Related 相关文章

  1. 1

    嵌套结构内存分配

  2. 2

    TensorFlow中的嵌套结构是什么?

  3. 3

    如何使用带有嵌套结构和最少代码更改的boost :: serialization?

  4. 4

    C中带有指针的嵌套结构

  5. 5

    带有负载库Matlab的嵌套结构

  6. 6

    C中带有指针的嵌套结构

  7. 7

    带有负载库Matlab的嵌套结构

  8. 8

    带有嵌套结构(集合)条件的 Mongo 查询

  9. 9

    Spark Dataframe - 如何操作带有嵌套结构的行?

  10. 10

    带有向量的分配结构的内存泄漏

  11. 11

    数组未正确生成嵌套结构

  12. 12

    为什么允许命名嵌套结构?

  13. 13

    链接到带有参数的路由的正确方法是什么?

  14. 14

    在内存中如何排列具有不同对齐方式的嵌套结构?

  15. 15

    带有 malloced 嵌套结构的 fwrite 和 fread 没有预期的行为

  16. 16

    这如何正确表示给定的嵌套结构[SICP]?我想念什么?

  17. 17

    在C中为不同的数据类型分配内存的正确方法是什么?

  18. 18

    具有嵌套结构的动态数组

  19. 19

    具有嵌套结构的动态数组

  20. 20

    clojure-为什么此代码会转置嵌套结构

  21. 21

    clojure-为什么此代码会转置嵌套结构

  22. 22

    protoc-c:带有可选字符串的嵌套结构抛出seg错误

  23. 23

    正则表达式带有特殊字符的嵌套结构

  24. 24

    从C ++到带有联合的嵌套结构C#封送处理

  25. 25

    从C ++到带有联合的嵌套结构C#封送处理

  26. 26

    从C ++到带有联合的嵌套结构C#封送处理

  27. 27

    如何在C中使用带有嵌套结构的指定init?

  28. 28

    python和ctypes访问带有嵌套结构的c++类

  29. 29

    从python中的嵌套结构中构建带有pandas的数据框

热门标签

归档