我正在将语言从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
答案 0 :(得分:7)
您需要考虑的第一件事是new
和malloc()
不是等效的。第二件事是ThreadNum
是struct
,所以您可能想写sizeof(struct ThreadNum)
,但通常更好的选择是这样
ThreadNum *thread_num = malloc(sizeof(*thread_num));
请注意,thread_num
上方不是类型或struct
,它是变量并且具有指针类型。在使用*
之前,这意味着您希望该类型的大小具有更少的间接级别。
回到我的第一条评论,new
不仅分配内存,而且还调用对象构造函数,这在c中是不存在的。
在c中,您必须手动进行所有初始化,并检查malloc()
是否返回了有效的指针。