Что не так с моим кодом (указателем)?

void create(azienda *a, int i, int n)
{
 //azienda it 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];" []ag;="" int="" j;="" j="i;" for(j="n+1;j">=i;j--)
 {
 a[j]=a[j-1];
 }

 return;
}
</n;h++)>

Я попытался создать функцию, которая создаст пространство для динамически распределенной структуры. Несмотря на то, что компилятор не дал мне никаких ошибок, он не работает! Можете ли вы объяснить мне, почему?

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;g++)>

Нет такого элемента, как [n + 1], поскольку действительные знаки будут [0, n + 1)

licensed under cc by-sa 3.0 with attribution.