我的代码(指针)出了什么问题?

时间:2014-01-07 21:06:14

标签: c++ pointers

void create(azienda *a, int i, int n)
{
    //azienda it's a struct
    azienda *ag;
    ag=new azienda [n];

    for(int h=0;h<n;h++)
    {
        ag[h]=a[h];
    }

    delete []a;

    a=new azienda[n+1];

    for(int g=0;g<n;g++)
    {
        a[g]=ag[g];
    }

    delete []ag;

    int j;

    j=i;

    for(j=n+1;j>=i;j--)
    {
        a[j]=a[j-1];
    }

    return;
}

我尝试创建一个为动态分配的结构创建空间的函数。尽管编译器没有给我任何错误,但它不起作用!你能解释一下为什么吗?

1 个答案:

答案 0 :(得分:1)

我认为主要的问题是你用作函数的第一个参数

的参数的指针
void create(azienda *a, int i, int n);

在功能内部没有任何改变。 azienda * a是函数的局部变量,退出函数后将被销毁。你有三种方法。第一个是从函数

返回新指针
azienda * create(azienda *a, int i, int n);

并将其分配给外部指针。

另外两个人使用间接。例如

void create(azienda **a, int i, int n);

void create(azienda * &a, int i, int n);

请注意此代码段无效

a=new azienda[n+1];

for(int g=0;g<n;g++)
{
    a[g]=ag[g];

}

delete []ag;

int j;

j=i;

for(j=n+1;j>=i;j--)
{

    a[j]=a[j-1];

没有[n + 1]这样的元素,因为有效的指标将是[0,n + 1]