zak100 Ответов: 2

Предупреждающее сообщение в C++: delete [ ] a


Привет,
Я получаю следующее предупреждающее сообщение в своем коде:

$ г++ GES1.cpp
GES1.cpp: в функции ‘int main(int, char**)’:
Повышенную Квинту ges1.ЧГК:100:14: предупреждение: удаление массива "а"
удалить [ ] A;

Мой код без функции GaussElimination(....) выглядит следующим образом:
#include <iostream>
#include <cmath>
#include <fstream>
#include <ctime>
#include <vector>

#define n  3

using namespace std;


void GaussianElimination(double **,double *b ,double *y);
int main(int argc, char * argv[])
{
  /* values
  Row0 = 0, 2, 1; b0= -8
  Row1 = 1, -2, -3; b1 = 0
  Row3 = -1, 1, 2; b2= 3

  Ans = -4, -5, 2 */
  //int **A = new {{0.0, 2.0, 1.0, -8.0}, {1.0, -2.0, -3.0, 0.0},{-1.0, 1.0, 2.0,3.0}};
  
  
  double *A[n];
  for (int i=0; i < n; i++)
    A[i] = new double [n];
  double *b = new double[n];
  double *y = new double[n];
  
  A[0][0] =0.0;A[0][1] =2.0; A[0][2] = 1.0; //A[0][3] = -8.0;
  A[1][0] =1.0;A[1][1] =-2.0; A[1][2] =-3.0; //A[1][3] = 0.0;
  A[2][0] =-1.0;A[0][1] =1.0; A[0][2] = 2.0; //A[0][3] = 3.0;
  b[0] = -8.0;
  b[1] = 0.0;
  b[2] = 3.0;

  
  GaussianElimination(A, b ,y);
  delete [] y;
  delete [ ]b;
  for(int i = 0; i < n; i++)
    delete [] A[i];
  delete [ ] A;  
}

Какое-нибудь тело, пожалуйста, направьте меня.

Зульфи.

Что я уже пробовал:

Извините, я не могу понять, потому что я использую тот же код в другой программе без какого-либо предупреждающего сообщения.

Зульфи.

0x01AA

Потому что нет никакой необходимости удалять а?
Подумайте еще раз о своем коде:
for (int i=0; i < n; i++)
A[i] = new double [n];

и
for(int i = 0; i < n; i++)
delete [] A[i];


нет необходимости удалять A, потому что он никогда не был выделен и больше это просто "переменная стека".

zak100

Благослови тебя Господь. Спасибо за Ваш быстрый ответ.
Зульфи.

0x01AA

Я не думаю, что Бог заботится о таких тривиальных вещах.
Бруно

2 Ответов

Рейтинг:
14

0x01AA

double *A[n];
"А" - это переменная, которую вы не создали динамически, это просто переменная. Так почему же вы думаете, что можете удалить "а"?

Смотрите также Мой комментарий к вашему вопросу.


Рейтинг:
1

KarstenK

Вы неправильно поняли свой A[] - это массив указателей, который вы не можете удалить.

Самое лучшее решение-это:

double A[n][n];
Нет необходимости в дополнительных выделениях или удалениях, как правильно описано в 0x01AA.