请在下面的代码片段中找出可能有错误或有安全隐患的地方,并写出错误的原因。
struct complex_t
{
int real;
int imag;
};
//若:create(complex_t&* p则 cannot convert from 'struct complex_t *' to'struct complex_t **
int create(complex_t*p,unsigned int n) //指针参数问题,应当传引用create(complex_t * &p, ..
{
p=new complex_t[n]; //new 与delete的对应
if(p==NULL){
return -1;
}
return 0;
}
int compute()
{
//implement
complex_t* comps;
unsigned int num = 0;
cin>>num;
if(create(comps,num)<0){//localvariable 'comps' used without having been initialized
cerr<<”create comps failed!”<<endl;
return -1;
}
long int sum=0;
unsigned int pos = 0;
cin>>pos;
while(pos<num){
cin>>comps[pos].real>>comps[pos].imag;
cin>>comps[pos+1].real>>comps[pos+1].imag;
sum+=comps[pos].real*comps[pos+1].real+comps[pos].imag*comps[pos+1].imag;
pos+=2; //一次加2,万一pos与num相差为奇数。
}
cout<<”sum is”<<sum<<endl;
return 0;
}