Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
gr_8_zizu
13 / 8 / 3
Регистрация: 07.01.2011
Сообщений: 149
1

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

25.08.2011, 01:34. Просмотров 729. Ответов 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;
}
//---------------------------------------------------------------------------
Вот скрин с ошибкой
Память не может быть прочитана!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2011, 01:34
Ответы с готовыми решениями:

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

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

Ошибка "Память не может быть read"
При вводе кол-ва учеников больше 2 ух выдаёт после ввода такую ошибку. Вот код:...

Память не может быть "written"
Помогите найти ошибку в следующем коде: На этапе вхождения в функцию...

Может ли быть такое?
поставил счетчик для сравнений в пирамидальной сортировке массива выдает 34732...

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

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

Добавлено через 14 часов 13 минут
Плз не сочтите за навящивость но срочно нужна помощь
0
grizlik78
Эксперт С++
2015 / 1496 / 206
Регистрация: 29.05.2011
Сообщений: 3,117
25.08.2011, 17:55 4
Ну а чем тебе помочь, если в функции сам чёрт ногу сломит?
Вот например, в строках 18 и 19 массив Array удаляется.
Дальше, в строках 51—64, в принципе, наверное создаётся. А есть уверенность, что создаётся? А если создаётся, то есть уверенность, что только один раз?
1
-=ЮрА=-
Заблокирован
Автор 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, давай весь код, если нужна оперативность
1
Сыроежка
Заблокирован
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, или еще в чем-то.
1
gr_8_zizu
13 / 8 / 3
Регистрация: 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 все же была, вы правы.
0
Сыроежка
Заблокирован
25.08.2011, 20:16 8
Так вы не сделали, что я сказал? Следовало бы сделать!

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

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

В чём может быть ошибка?
Описать функцию Power4(x,a,ξ) вещественного типа (параметры х, а, ξ -...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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