如何将新的更改为malloc?

时间:2018-10-04 00:46:47

标签: c++ c

我正在将语言从c ++更改为c,并希望使用new,但是c不允许使用new,因此我必须使用malloc。

malloc(sizeof(*ThreadNum))

当我自己尝试并用尽所有选项时,上面的行不起作用。这是我希望切换的行。任何提示都会很可爱:)

for(i=0; i <NUM_THREADS; i++){

ThreadS [i] = new struct ThreadNum; //allocating memory in heap
(*ThreadS[i]).num = num;
(*ThreadS[i]).NumThreads = i;
pthread_t ID;

printf("Creating thread %d\n", i); //prints out when the threads are created

rc = pthread_create(&ID, NULL, print, (void *) ThreadS[i]); //creates the threads

1 个答案:

答案 0 :(得分:7)

您需要考虑的第一件事是newmalloc()不是等效的。第二件事是ThreadNumstruct,所以您可能想写sizeof(struct ThreadNum),但通常更好的选择是这样

ThreadNum *thread_num = malloc(sizeof(*thread_num));

请注意,thread_num上方不是类型或struct,它是变量并且具有指针类型。在使用*之前,这意味着您希望该类型的大小具有更少的间接级别。

回到我的第一条评论,new不仅分配内存,而且还调用对象构造函数,这在中是不存在的。

在c中,您必须手动进行所有初始化,并检查malloc()是否返回了有效的指针。