[英]C++ program won't end on return
我有个问题。 当我检测到错误时,我无法退出程序。
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执行相同操作时。 分配内存它不会退出并继续(消息我写入控制台窗口,但程序流程只是继续......)。 任何想法如何解决它?
我无法理解的标识符在你的程序,但也许问题是你释放内存两次:第一次是free(p)
在功能上napln
,第二个是free(A)
和free(B)
的main
。 尽量不要释放函数napln
的指针。
return
永远只能从您目前所在的函数返回。您可以使用您的返回值napln
功能来决定,从外部,该程序应该结束,根据返回值。 例如,你可以让napln返回,让我们说失败时为1,成功时为0,根据返回值,你可以这样做:
if(!napln(A,N))
return 1; //return from main
C ++也有例外作为通过返回值控制程序流的替代方法。
或者,您可以使用void exit(int status)
函数退出程序,无论您当前的上下文如何,尽管构建代码不是一个很好的做法。
无论如何,代码的结构不是很好。 例如,您应该尽量不重复自己,并将输入请求的一部分作为一个函数,而不是复制和粘贴它并将A更改为B.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.