繁体   English   中英

C ++程序不会在返回时结束

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM