Форум программистов, компьютерный форум CyberForum.ru

Происхродит ли здесь возврат указателя на не действительную память? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Нахождение корней уравнения методом обратного интерполирования http://www.cyberforum.ru/cpp-beginners/thread575021.html
Помощь нужна! кто можеть помогите
C++ Ошибка в скобке? #include <conio.h> #include <iostream.h> #include <cmath.h> main() { double a, z2, z1, x, y; http://www.cyberforum.ru/cpp-beginners/thread575020.html
Найти количество слов, оканчивающихся на мягкий знак C++
Дано предложение без знаков препинания. Составить программу поиска количества слов, оканчивающихся на мягкий знак. Как произвести поиск, что бы считалось количество, только тех слов, которые заканчиваются на мягкий знак???
C++ таблица
дана таблица a содержащая числа 0,1,5 или 11. Посчитать количество четверок a,a,a в каждой из которых все элементы разные, нужно решение на С++ помогите пожалуйста
C++ Найти наименьшее натуральное число, которое отсутствует в последовательности и определить его делители. http://www.cyberforum.ru/cpp-beginners/thread574977.html
Дана последовательность натуральных чисел. Найти наименьшее натуральное число, которое отсутствует в последовательности и определить его делители.
C++ Странности с чтением объекта структуры из файла Почему-то возникают проблемы с чтением объектов структуры из файла. Структура struct Item { Item(int k,const char* ch, Item* n=NULL) :key(k),info(new char),next(n) { strcpy(info,ch); length=strlen(info)+1; } подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.05.2012, 11:17     Происхродит ли здесь возврат указателя на не действительную память?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
double *Gaus(double **Matix, double *Frees, int N)
{
 double **DownRow;
 double *DownFree;
 int i;
 double **UpnRow;
 double *UpFree;
 double *Main;
 double *AboveMain;
 double k;
 double *DownItem;
 double *UpItem;
 double *x;
 double *Currentx;
 double *Lastx;
 double s;
 double *Previusx;
 double **Row;
 double *Item;
 double *Free;
 for (i=N-1, DownRow=Matix+i, DownFree=Frees+i; DownRow>Matix; --DownRow, --DowFree)
 {
  Main=*DownRow+i;
  for (UpRow=DownRow+1, UpFree=DownFree-1; UpRow>=Matrix; --UpRow)
  {
   AboveMain=*UpRow+i;
   k=*AboveMain/(*Main);
   *AboveMain=0.0;
   for (DownItem=Main-1, UpItem=AboveMain-1; DownItem>=*DownRow; --DownItem, --UpItem)
   {
    *UpItem-=DownItem*k;
   }
   *UpFree-=*DownFree*k;
  }
 }
 if (N>0)
 {
  x=new double [N];
  if (x)
  {
   for (i=0, Lastx=x+i, Currentx=x, Row=Matrix, Free=Frees;  Currentx<=Lastx; +Currentx, ++Row, ++i, ++Free)
   {
    s=0.0;
    Main=*Row+i;
    for (Previusx=Currentx-1, Item=Main-1; Previusx>=x; --Previusx)
    {
     s+=*Previusx*(*Item);
    }
    *Currentx=(*Free-s)/(*Main);
   }
  }
 }
 else
 {
  x=NULL;
 }
 return x;
}
В принципе, x - локальная переменная, а указатели на локальные данные возвращать нельзя, так как эти указатели не действительны из-за неявного уничтожения локальных переменных в момент выхода из функции. Но x - уже указатель на динамические данные и здесь возвращается хоть и указатль, но не на x, а значение x. Можно ли так делать, или возвращённый указатель не действителен и указывает на неявно освобождённую память? То есть уничтожается ли при выходе только сам x, или уничтожается сам x и освобождается всё, что выделено по x?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru