我有问题。当我检测到错误时,我无法退出程序。
int main()
{
int N,N1;
cout<<("Zadejte pocet prvku mnoziny A:")<<endl;
cin>>N;
if (N<=0 || cin.fail()){
cout<<("Nespravny vstup.")<<endl;
return 1;
}
int *A=(int *)malloc(sizeof(int)*N); /***********/
cout<<("Zadejte prvky mnoziny A:")<<endl;
napln(A,N);
/************************************************/
cout<<("Zadejte pocet prvku mnoziny B:")<<endl;
cin>>N1;
if (N1<=0 || cin.fail()){
cout<<("Nespravny vstup.")<<endl;
return 1;
}
int *B=(int *)malloc(sizeof(int)*N1); /***********/
cout<<("Zadejte prvky mnoziny B:")<<endl;
napln(B,N1);
int *C=(int *)malloc(sizeof(int)*((N1>N)? N1:N)); /***********/
vypis(C,porovnej(A,B,C,N,N1));
free(A);
free(B);
free(C);
return 0;
}
int napln(int *p,int n){
int prvek,i,j;
for (i=0;i<n;i++){
cin>>prvek; //dodelat kontrolu
if (cin.fail()){
cout<<("Nespravny vstup.")<<endl;
free(p);
return 1;
}
else{
p[i]=prvek;
for(j=0;j<i;j++){
if (p[i]==p[j]){
cout<<("Nespravny vstup.")<<endl;
free(p);
return 1;
}
}
}
}
return 1;
}
问题是当我调用napln函数一次(在分离的.cpp文件中尝试)它完美地工作(检测到双倍值并退出)但是当我为另一个dyn做同样的事情时。分配内存它不会退出并继续(消息我写入控制台窗口,但程序流程只是继续......)。任何想法如何解决它?
答案 0 :(得分:1)
我无法理解你的程序中的标识符,但问题是你可以释放两次内存:首先是函数free(p)
中的napln
,第二个是free(A)
和{{在free(B)
中的1}}。尽量不要释放函数main
中的指针。
答案 1 :(得分:1)
return
只会从您当前所在的函数返回。
您可以使用napln
函数的返回值,根据返回值从外部决定程序应该结束。例如,你可以让napln返回,假设失败时为1,成功时为0,根据返回值,你可以这样做:
if(!napln(A,N))
return 1; //return from main
C ++还有例外作为通过返回值控制程序流的替代方法。
或者,您可以使用void exit(int status)
函数退出程序,无论您当前的上下文如何,尽管构建代码不是一个很好的做法。
无论如何,代码的结构不是很好。例如,您应该尽量不重复自己并使输入请求成为您的代码的一部分,而不是复制和粘贴它并将A更改为B.