小编str*_*ard的帖子

如何通过引用或指针传递的指针正确释放main中的内存?

我正在编写一个由main调用的函数,它将内存分配给main中声明的几个指针.我知道我可以通过使用指针指针或引用指针来做到这一点,但我有问题在main中释放这些内存.请帮我解决以下代码中的错误:

1.使用指针指针:

void fun1(int **a, double **b, char **c)
{

    *a=new int[20];
    *b=new double[20];
    *c=new char[10];

    for (int i=0;i<20;i++){
        (*a)[i]=i;
        (*b)[i]=sqrt((double)((*a)[i]));
    }
    *c="0123456789";

}


int _tmain(int argc, _TCHAR* argv[])
{
    int *a;
    double *b;
    char *c;

    fun1(&a,&b,&c);
    cout<<"a & b are:"<<endl;
    for(int i=0;i<20;i++)
        cout<<a[i]<<"\t"<<b[i]<<endl;
    cout<<"c is: "<<c<<endl;

    delete[] a;
    delete[] b;
    delete[] c;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

2.使用对指针的引用:

void fun1(int*& a, double*& b, char*& c)
{

    a=new int[20];
    b=new double[20];
    c=new char[10];

    for (int i=0;i<20;i++){
        a[i]=i;
        b[i]=sqrt((double)a[i]);
    }
    c="0123456789";

}


int …
Run Code Online (Sandbox Code Playgroud)

c++ memory-management pass-by-reference

2
推荐指数
1
解决办法
320
查看次数

对于一元操作如何导致此输出感到困惑

可能的重复:
单个语句中的多个增量运算符
未定义的行为和序列点

有人可以向我解释为什么这行代码产生这样的输出?代码(在将i&j初始化为零之后):

cout<<i++<<','<<++j<<','<<--i<<','<<j--<<'\n';
Run Code Online (Sandbox Code Playgroud)

输出:

-1,0,0,0;
Run Code Online (Sandbox Code Playgroud)

我知道i ++意味着首先评估然后再增加1,而++ i意味着增加1然后评估.但不确定在顺序cout语句中的多重评估是什么行为.

谢谢!

c++ unary-operator

0
推荐指数
1
解决办法
178
查看次数