【问题标题】:memory allocation in C for pointersC中指针的内存分配
【发布时间】:2018-08-11 04:49:02
【问题描述】:

我正在尝试在 C 中构建一个名为 PROCESS 的结构,该结构应包含进程的 ID(id) 和等待时间 (wt)。

typedef struct PROC{
    int id;
    int wt;
}PROCESS;

PROCESS *pt = NULL;

现在我想创建多个这个结构的实例,比如一个数组。 我想做的是这样的':

PROCESS pt[10];
pt[0].id = 5;
pt[1].id = 7;

但我想使用动态内存分配来做到这一点:

pt = calloc(2,sizeof(PROCESS));

pt[0]->id = 5;

我的错误是什么?

【问题讨论】:

  • 如果真的是c,则无需转换为struct _PROCESS
  • 使用ptr[0].id = 5;
  • 我们应该把它当作错字还是你不知道?
  • 另一个问题:使用“保留标识符”,对该术语进行一些研究。
  • @IharobAlAsimi 已编辑。感谢您的评论,但这不是我要问的

标签: c malloc dynamic-memory-allocation calloc


【解决方案1】:

pt是指向PROCESS的指针,pt[0]pt指向的第一个PROCESS对象。 访问结构成员的-> 运算符只能与指针一起使用,否则使用.

pt[0].id = 5;

应该是正确的。1

既然你说你在做 C,you don't need to cast malloc or calloc.

PROCESS *pt = calloc(2, sizeof *pt);
if(pt == NULL)
{
    // errror handling
    // do not continue
}

pt[0].id = 5;
pt[1].id = 7;

另外别忘了检查calloc的返回值,别忘了释放 后面的内存用free(pt);


注解

1注意,这相当于

pt->id = 5;

但如果你想设置第二个元素的id,你需要这样做

(pt+1)->id = 7;

但我认为这样做更具可读性

pt[1].id = 7;

【讨论】:

    【解决方案2】:
    typedef struct process{
        int id;
        int wt;
    }processes;
    

    我会这样分配->

    int numberOfDynamicStructs=2;
    
    processes* myProcesses= calloc(numberOfDynamicStructs,sizeof(processes));
    

    写->

    myProcesses[0].id=1;
    myProcesses[1].id=2;
    

    读取->

    printf("%d %d",myProcesses[0].id,myProcesses[1].id);
    

    完成后免费..

    /A

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-21
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 2020-03-11
      • 1970-01-01
      相关资源
      最近更新 更多