0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 7
1

Ошибки при создании и уничтожении динамических массивов.

13.10.2010, 13:28. Показов 1075. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть задача: формируется некоторая геометрия области и вспомогательные данные. Это всё пишется в 5 динамических массивов. После формирования содержимое массивов пишутся в файлы, а потом удаляются. В другой процедуре из этих файлов данные читаются в другие 5 динамических массиовов и обрабатываются.

Проблема в том, что в первой процедуре массивы не удаляются (debug error, heap corruption detected), а во второй - не создаются (AccessViolationException Attempted to read or write protected memory). Процедуры вызываются соответствующими кнопками на форме.

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
//создаю массивы
float *x = new float[n_uzlov];
float *y = new float[n_uzlov];
 
int *ind_i = new int[n_elem];
int *ind_j = new int[n_elem];
int *ind_k = new int[n_elem];
 
//далее заполняю массивы
 
 
 
//пишем в файлы 
System::IO::StreamWriter  ^file_coords_x_old = gcnew System::IO::StreamWriter("D:\\import\\C_kurs\\coords_x_old.txt");
System::IO::StreamWriter  ^file_coords_y_old = gcnew System::IO::StreamWriter("D:\\import\\C_kurs\\coords_y_old.txt");
 
file_coords_x_old->WriteLine(Convert::ToString(n_uzlov));
file_coords_y_old->WriteLine(Convert::ToString(n_uzlov));
 
for (i=0; i<=n_uzlov; i++){
    file_coords_x_old->WriteLine(Convert::ToString(x[i]));
    file_coords_y_old->WriteLine(Convert::ToString(y[i]));
}
 
file_coords_x_old->Close();
file_coords_y_old->Close();
 
System::IO::StreamWriter  ^file_ind_ijk = gcnew System::IO::StreamWriter("D:\\import\\C_kurs\\ind_ijk.txt");
file_ind_ijk->WriteLine(Convert::ToString(num_cols*num_rows*2-1));
for (i=0; i<=(num_cols*num_rows*2-1); i++){
    file_ind_ijk->WriteLine(ind_i[i]);
    file_ind_ijk->WriteLine(ind_j[i]);
    file_ind_ijk->WriteLine(ind_k[i]);
}
file_ind_ijk->Close();
 
 
delete[] x; //тут выдаёт ошибку при запуске
delete[] y;
delete[] ind_i;
delete[] ind_j;
delete[] ind_k;
Если не удалять массивы, то в другой процедуре выдаёт ошибку при создании массивов

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
System::IO::StreamReader  ^file_coords_x_old = gcnew System::IO::StreamReader("D:\\import\\C_kurs\\coords_x_old.txt");
System::IO::StreamReader  ^file_coords_y_old = gcnew System::IO::StreamReader("D:\\import\\C_kurs\\coords_y_old.txt");
System::IO::StreamReader  ^file_ind_ijk = gcnew System::IO::StreamReader("D:\\import\\C_kurs\\ind_ijk.txt");
 
int num_uzlov, num_elem;
 
num_uzlov=Convert::ToInt16(file_coords_x_old->ReadLine());//так надо
num_uzlov=Convert::ToInt16(file_coords_y_old->ReadLine());
 
num_elem=Convert::ToInt32(file_ind_ijk->ReadLine());
 
float *x = new float[num_uzlov];//здесь ошибка
float *y = new float[num_uzlov];
int *ind_i = new int[num_elem]; 
int *ind_j = new int[num_elem]; 
int *ind_k = new int[num_elem];
Пробовал поменять имя массива во второй процедуре, не помогло.

upd Если не формировать файлы в первой процедуре, а только выполнять вторую, то всё работает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2010, 13:28
Ответы с готовыми решениями:

Инициализация динамических массивов при создании
как создавать динамические массивы,чтоб вводить данные с клавиатуры знаю.. примерно это выглядит...

Ошибки при удалении динамических массивов
компилируется все нормально, но при вызове delete к абсолютно валидным указателям почему то...

Нехватка памяти при создании динамических объектов
Создаю 4 динамических объекта. 3 вектора и матрица. матрица - это результат перемножения двух...

Stack overflow при создании динамических компонентов
Вот код procedure TForm1.Button5Click(Sender: TObject); begin createtelnet;...

0
13.10.2010, 13:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2010, 13:28
Помогаю со студенческими работами здесь

Ошибка System.NullReferenceException при создании динамических контролов
На форме по нажатию на кнопки можно создать до трех контролов DateTimePicker. Их значение нужно...

Ошибка при инициализации динамических массивов
Этот вопрос - продолжение https://www.cyberforum.ru/lazarus/thread1944495.html. Убрал всё что не...

Ошибка при удалении динамических массивов
#include &lt;iostream&gt; int main() { setlocale(LC_ALL, &quot;rus&quot;); int m, a, c, x0, x_minus, size =...

При приравнивание динамических массивов создаётся ссылка
Вот код: program abc; var World,kkk:array of array of byte; i,i1:integer; begin...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru