我的代码在这里。
struct process *init_process (char *programName, int startTime, int cpuTime) {
struct process *proc;
proc = (malloc(sizeof(struct process)));
if (proc == NULL) {
printf("Fatal error: memory allocation failure.\nTerminating.\n");
exit(1);
}
proc->programName = programName;
proc->cpuTime = cpuTime;
proc->startTime = startTime;
proc->next = NULL;
return(proc);
};
编译器在第3行说“错误:从'void *'无效转换为'process *'”。 我尝试使用process *(malloc(sizeof(struct process)))来进行类型转换,但是编译器说'错误:这次'*'token'之前的预期primary-expression。
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
在C ++中,您应该使用新的样式转换:
proc = static_cast<process *>(malloc(sizeof(struct process)));
但是,如果您真的使用的是C ++编译器,那么您应该使用new
/ new[]
进行动态分配(并使用delete
/ delete[]
进行重新分配)。
proc = new process;
如果您要将C代码移植到C ++,并且您不想修改当前的malloc()
调用,可以尝试添加此代码:
#ifdef __cplusplus
namespace cxx {
class voidptr {
void *p_;
public:
voidptr (void *p = 0) : p_(p) {}
template <typename T>
operator T * () const { return static_cast<T *>(p_); }
};
voidptr malloc (size_t sz) { return ::malloc(sz); }
voidptr calloc (size_t cnt, size_t sz) { return ::calloc(cnt, sz); }
voidptr realloc (void *p, size_t newsz) { return ::realloc(p, newsz); }
}
#define malloc(x) cxx::malloc(x)
#define calloc(x,y) cxx::calloc(x,y)
#define realloc(x,y) cxx::realloc(x,y)
#endif