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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gr_8_zizu
13 / 8 / 2
Регистрация: 07.01.2011
Сообщений: 149
#1

Память не может быть прочитана! - C++

25.08.2011, 01:34. Просмотров 659. Ответов 8
Метки нет (Все метки)

Проблема возникает при копировании одного массива в другой. Я вроди просмотрел и размерности вроди совпадают, но может быть я что то упустил, какую нибудь мелочь и поэтому возникает ошибка. Прошу помочь выяснить в чем конкретно проблема.

Входные параметры функции: n=7, m=2, matr[][2]={{1,2},{0,3},{3,4},{2,6},{5,-1},{-1,-1},{5,-1}}, a={0,1,2,3,4,5,6}, Array={{-1,-1,-1,-1,-1,-1,-1},{0,1,2,3,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},{5,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},{4,6,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},}, fora=1, forArray=9.

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
void part2(int n, int m, int matr[][2], int** a, int** Array, int& fora, int forArray)
{
int d2,d1,p1,p2,y1,y2,q1,q2;
 
for (int i=0; i<fora; i++) delete [] a[i];  //удаляем
delete [] a;                                //массив А
fora=forArray;                //новая расзмерность массива А ровна старой размерности массива Array
a = new int * [fora];                     //создаем
for (int i=0; i<fora; i++) a[i]=new int [n]; //новый массив А
 
for(int i=0; i<forArray; i++)   //копируем
{                               //элементы массива Array в
   for(int j=0; j<n; j++)       //массиву А
   {
   a[i][j]=Array[i][j];
   }
}
for (int i=0; i<forArray; i++) delete [] Array[i];  //удаляем
delete [] Array;                                    //массив Аrray
 //------------------------------
for(int i=0; i<n; i++)
{
   for(int j=0; j<m; j++)
   {
      if(j==0)
      {
         d1=matr[i][j];
      }
      else
      {
         d2=matr[i][j];
      }
   }
   p1=serchposition(d1,a,fora,n);
   p2=serchposition(d2,a,fora,n);
   for(int x=i+1; x<n; x++)
   {
      for(int y=0; y<m; y++)
      {
         if(y==0)
         {
            y1=matr[x][y];
         }
         else
         {
            y2=matr[x][y];
         }
      }
      q1=serchposition(y1,a,fora,n);
      q2=serchposition(y2,a,fora,n);
      if((p1==q1)&&(p2==q2))
      {
         forArray=forArray+1;
         Array = new int * [forArray];                        //создаем
         for (int i=0; i<forArray; i++) Array[i]=new int [n]; //новый массив Аrray
         for(int k=0; k<forArray; k++)
         {
            for(int z=0; z<n; z++)
            {
               Array[k][z]=-1;
            }
         }
         funk1(n,fora,i,x,Array,a);    
      }
   }
      for (int i=0; i<fora; i++) delete [] a[i];  //удаляем
   delete [] a;                                //массив А
   fora=forArray;                //новая расзмерность массива А ровна старой размерности массива Array
   a = new int * [fora];                     //создаем
   for (int i=0; i<fora; i++) a[i]=new int [n]; //новый массив А
 
   for(int i=0; i<forArray; i++)   //копируем
   {                               //элементы массива Array в
      for(int j=0; j<n; j++)       //массиву А
      {
      a[i][j]=Array[i][j];    //--------------------ВОТ ТУТ РУГАЕТСЯ------------------------------
      }
   }
 
   for (int i=0; i<forArray; i++) delete [] Array[i];  //удаляем
   delete [] Array;                                    //массив Аrray
}
//--------------------------------------
         cout<<'\n';            cout<<'\n';
 
 
 
bool prov;
cout<<"---------------------------------------------"<<'\n';
int o=1;
for(int i=0; i<fora; i++)
{
   prov=proverka(i,n,a);
   if(prov==true)
   {
   cout<<"class"<<o<<"  ";
      for(int j=0; j<n; j++)
      {
         if(a[i][j]!=-1)
         {
         cout<<a[i][j]<<" ";
         }
      }
      cout<<'\n';
      o++;
   }
}
}
 
//---------------------------------------------------------------------------
int serchposition(int d, int** a, int fora, int n)
{
   for(int i=0; i<fora; i++)
   {
      for(int j=0; j<n; j++)
      {
         if(a[i][j]==d)return i;
      }
   }
return 1000;
}
//---------------------------------------------------------------------------
void funk1(int n, int fora, int i, int x, int** Array, int**a)
{
         for(int i1=0; i1<fora; i1++)    //вместо fora было forArray-1
         {
            for(int j1=0; j1<n; j1++)
            {
               if(a[i1][j1]==i || a[i1][j1]==x){Array[i1][j1]=-1;}
               else{Array[i1][j1]=a[i1][j1];}
               Array[fora][0]=i;
               Array[fora][1]=x;
            }
         }
}
//---------------------------------------------------------------------------
bool proverka (int i, int n, int** a)          //проверка на наличие подкласса при выводе
{                                              //строки со всеми (-1) возвращают значение
bool prov=true;                                //FALSE
    for(int y=0; y<n; y++)
      {
      if(a[i][y]!=-1)
        {
        prov=true;
        return prov;
        }
      else
        {
        prov=false;
        return prov;
        }
      }
return prov;
}
//---------------------------------------------------------------------------
Вот скрин с ошибкойПамять не может быть прочитана!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2011, 01:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Память не может быть прочитана! (C++):

Память не может быть прочитала - C++
Здравствуйте, вот есть код: struct Dyn{ Syt select; Dyn* next; }; ............

По каким причинам память не может быть выделена динамически? - C++
Что это могут быть за причины?

Память не может быть "written" - C++
Помогите найти ошибку в следующем коде: На этапе вхождения в функцию &quot;vvod_vseh&quot;, а именно при вводе первой фамилии - выскакивает ошибка...

Может ли быть такое? - C++
поставил счетчик для сравнений в пирамидальной сортировке массива выдает 34732 сравнения. Добавлено через 1 час 3 минуты up!

В чем может быть ошибка? - C++
Вот программа: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt; #include...

Как такое может быть? - C++
Пишу программку... Начало функции мейн. Не прошло еще ничего кроме файла: int k=1; int l=1; На что компилятор мне выдает, что...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.08.2011, 01:56 #2
напиши что и куда копируешь(опиши аргументы функций), а то спагетти слиплись
gr_8_zizu
13 / 8 / 2
Регистрация: 07.01.2011
Сообщений: 149
25.08.2011, 17:48  [ТС] #3
Восле всяческого рода преобразований указонных в коде до надписи "//ВОТ ТУТ РУГАЕТСЯ", поэлементно копируются элементы массива "Array" в массив "a".

Добавлено через 49 секунд
а аргументы те же что и параметры.

Добавлено через 14 часов 13 минут
Плз не сочтите за навящивость но срочно нужна помощь
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
25.08.2011, 17:55 #4
Ну а чем тебе помочь, если в функции сам чёрт ногу сломит?
Вот например, в строках 18 и 19 массив Array удаляется.
Дальше, в строках 51—64, в принципе, наверное создаётся. А есть уверенность, что создаётся? А если создаётся, то есть уверенность, что только один раз?
-=ЮрА=-
Заблокирован
Автор FAQ
25.08.2011, 17:57 #5
Цитата Сообщение от gr_8_zizu Посмотреть сообщение
delete [] Array[i]; *//удаляем
delete [] Array; * * * * * * * * * * * * * * * * * *//массив Аrray
- зачем это делать ведь судя из твоего топика

Цитата Сообщение от gr_8_zizu Посмотреть сообщение
Array={{-1,-1,-1,-1,-1,-1,-1},{0,1,2,3,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},{5,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},{4,6,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},}
- он статический...

Добавлено через 54 секунды
gr_8_zizu, давай весь код, если нужна оперативность
Сыроежка
Заблокирован
25.08.2011, 18:46 #6
Чтобы быстрей найти ошибку, вставьте в свою функцию part2 печать своего массива Array точно также, как вы это делаете с помощью циклов


C++
1
2
3
4
5
6
7
8
for(int i=0; i<forArray; i++)
{
   for(int j=0; j<n; j++) 
   {
       printf( "%d; ", Array[i][j] );
   }
   printf( "\n" );
}
И будет ясно, проблема в вашем массиве Array, или еще в чем-то.
gr_8_zizu
13 / 8 / 2
Регистрация: 07.01.2011
Сообщений: 149
25.08.2011, 20:14  [ТС] #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- зачем это делать ведь судя из твоего топика

- он статический...

Добавлено через 54 секунды
gr_8_zizu, давай весь код, если нужна оперативность
Массив Array не статический его я просто в функцию передаю, а там до етого момента еще очень много кода и я не стал кидать его что бы не запаривать вам мозги не нужным кодом. В связи с этим просто написал параметры которые будут переданы для конкретного примера.

Добавлено через 1 минуту
Цитата Сообщение от Сыроежка Посмотреть сообщение
Чтобы быстрей найти ошибку, вставьте в свою функцию part2 печать своего массива Array точно также, как вы это делаете с помощью циклов


C++
1
2
3
4
5
6
7
8
for(int i=0; i<forArray; i++)
{
   for(int j=0; j<n; j++) 
   {
       printf( "%d; ", Array[i][j] );
   }
   printf( "\n" );
}
И будет ясно, проблема в вашем массиве Array, или еще в чем-то.
это уже делал, проблема с массивом Array все же была, вы правы.
Сыроежка
Заблокирован
25.08.2011, 20:16 #8
Так вы не сделали, что я сказал? Следовало бы сделать!

Я также обратил внимание, что в функции параметр int& fora объявлен по ссылке. Так что вполне возможно, если эта функция вызывается неоднократно, что у вас значение этого аргумента не то, что вы предполагаете, при следующем вызове функции.
gr_8_zizu
13 / 8 / 2
Регистрация: 07.01.2011
Сообщений: 149
25.08.2011, 20:17  [ТС] #9
Всем спасибо. Уже разобрался с ошибкой. Дело было в том что массив Array создавался только в том случае когда p1==q1 и p2==q2, а дальше нужно было копировать массив Array в массив а. Так вот если не выполнялось бы условие p1==q1 и p2==q2 то массив не создавался бы, но тем не менее нада было копировать его в массив а. А так как массив Array был удален, а создан не был, выдавалась ошибка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2011, 20:17
Привет! Вот еще темы с ответами:

В чём может быть ошибка? - C++
Описать функцию Power4(x,a,ξ) вещественного типа (параметры х, а, ξ - вещественные, |х|&gt;1; a,ξ &gt; 0), находящую приближенное значение...

В чём может быть ошибка? - C++
Не пойму в чём ошибка в программе: #include &lt;iostream&gt; using namespace std; int main( ) // Program that...

где может быть ошибка на с++ - C++
при подсчете sn через 5 членов цикл повторяется вот текст программы #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; ...

В чём может быть ошибка? - C++
Пишет, что нету точки с запятой. Где??? #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; { class Program ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.08.2011, 20:17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru