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

Ошибка с динамической памятью - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Проинтегрировать функцию методом правых прямоугольников http://www.cyberforum.ru/cpp-beginners/thread1180442.html
Здравствуйте. Мне необходимо проинтегрировать одну из трех функций методом правых прямоугольников. Для этого мне необходимо построить одну из трех функций (по выбору) и указать на графике прямоугольники, которые строятся с определенным шагом. То есть должно получиться приблизительно так, как указано на рисунке. Понимаю, все, что написано ниже, может сбить с толку. Мне нужен хотя бы алгоритм,...
C++ Сформировать одномерный массив по арифметическим выражениям Помогите пожалуйста решить и распишите каждую строчку т.е что тут произошло -Сформировать одномерный массив А из 20 целых чисел, которые вычисляются по закону А=A*2, a A=1 http://www.cyberforum.ru/cpp-beginners/thread1180440.html
C++ Найти разделяющий индекс
4. int partition(int first, int last, string appNames, float appPrices); Splits string array appNames and appPrices around a pivot index p (the pivot). At the end of the partition, prices in appPrices below index p are less than or equal to prices above index p. The function returns the pivot p. Strings in array appNames must stay in synch with prices in the array appPrices at all times, i.e.,...
Определить попадание произвольной точки в заштрихованную область C++
Помогите пожалуйста написать программу. Задание:"Определить попадание произвольной точки в заштрихованную область"Язык С++. Заранее огромное спасибо!!!)))
C++ Чтение уравнения из файла http://www.cyberforum.ru/cpp-beginners/thread1180346.html
Здравствуйте уважаемые форумчане! Мне необходима ваша помощь. Я считываю матрицу из файла: n = stroki(); m = stolbci(); a = new double ; b = new double *; for( int i = 0; i < n ; i++) b = new double ;
C++ Удаление строки из файла Кто может подсказать рабочую функцию удаление строки из файла. Поиск строки не нужен, только удаление :) подробнее

Показать сообщение отдельно
asdred
0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 2
19.05.2014, 09:01     Ошибка с динамической памятью
Очень прошу помочь исправить ошибку в области дин.памяти.

Проблема: 1. Шаг Создаю массив для записи 2. Шаг удаляю элемент под номером k, и тут вылетает крит.

Примечание: Если запускать с отладчиком (F5) крит не вылетает, и программа работает.

Код:

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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include <iostream>
#include <fstream>
#include <Windows.h>
#include "ShellAPI.h"
 
using namespace std;
 
fstream f;
 
struct driver
{
    char *name;
    char *autonum;
    char *technum;
};
 
void infile(driver *mas, int n)
{
    f.open("f.dat",ios::out);
    for(int i = 0; i < n; i++)
    {
        f << mas[i].name; f << "\n";
        f << mas[i].autonum; f << "\n";
        f << mas[i].technum; f << "\n";
    }
    f.close();
}
 
void outfile(driver *mas, int n, driver &p)
{
    f.open("f.dat", ios::in);
    do
    {
        p.name = new char[20];
        f >> p.name;
        p.autonum = new char[20];
        f >> p.autonum;
        p.technum = new char[20];
        f >> p.technum;
        if (f.eof()) break;     
        cout << p.name << endl;
        cout << p.autonum << endl;
        cout << p.technum << endl;
    }
    while (!f.eof());
    f.close();
}
 
void createmas(driver *&mas, int &n)
{
    cout << "Кол-во элементов: ";
    cin >> n;
    mas = new driver[n];
    for(int i = 0; i < n; i++)
    {
        mas[i].name = new char[20];
        cout << "Введите имя: ";
        cin >> mas[i].name;
        mas[i].autonum = new char[20];
        cout << "Введите авто: ";
        cin >> mas[i].autonum;
        mas[i].technum = new char[20];
        cout << "Введите техпаспорт: ";
        cin >> mas[i].technum;
    }
    infile(mas,n);
}
 
void delelmas(driver *&mas, driver *&tempmas, int &k, int &n)
{
    cout << "Номер удаляемого элемента: ";
    cin >> k;
    tempmas = new driver [n-1];
    for ( int i = 0; i < k-1; i++ )
    {
        tempmas[i] = mas[i];
    }
    for ( int i = k-1; i < n; i++ )
    {
        tempmas[i] = mas[i+1];
    }
    delete [] mas;
    mas = tempmas;
    n = n - 1;
    infile(mas,n);
}
 
void addinmas(driver *&mas, driver *&tempmas, driver *&tempmas2, int &n, int &N, int &K)
{
    
    cout << "Сколько элементов добавить: ";
    cin >> N;
    cout << "Под каким номером: ";
    cin >> K;
    K--;
    tempmas = new driver[N];
    tempmas2 = new driver[N + n];
    for (int i = 0; i < N; i++)
    {
        tempmas[i].name = new char[20];
        cout << "Введите имя: ";
        cin >> tempmas[i].name;
        tempmas[i].autonum = new char[20];
        cout << "Введите авто: ";
        cin >> tempmas[i].autonum;
        tempmas[i].technum = new char[20];
        cout << "Введите техпаспорт: ";
        cin >> tempmas[i].technum;
    }
    for (int i = 0; i < K; i++)
    {
        tempmas2[i] = mas[i];
    }
    for (int i = K, j = 0; i < N + K; i++, j++)
    {
        tempmas2[i] = tempmas[j];
    }
    for (int i = N + K; i < N + n; i++, K++)
    {
        tempmas2[i] = mas[K];
    }
    delete [] mas;
    mas = tempmas2;
    n = N + n;
    infile(mas,n);
}
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int sw, n, k, N, K;
    driver *mas, *tempmas, *tempmas2, p;
    bool a = false;
    do
    {
        cout << "1. Создать файл и(или) записать структурированные данные" << endl;
        cout << "2. Удалить из файла элемент с заданным номером" << endl;
        cout << "3. Добавить в файл N элементов с номером К" << endl;
        cout << "4. Печать из файла" << endl;
        cout << "5. Удалить файл" << endl;
        cout << "6. Открыть файл" << endl;
        cout << "0. Выход" << endl;
        cout << "Выбор: ";
        cin >> sw;
        switch(sw)
        {
            case 1:
                createmas(mas,n);
                a = true;
                system("pause");
                system ("cls");
                break;
            case 2:
                if (a == true)
                delelmas(mas,tempmas,k,n);
                else cout << "Перед удалением элемента необходимо чтобы файл был создан программно." << endl;
                system("pause");
                system ("cls");
                break;
            case 3:
                if (a == true)
                addinmas(mas,tempmas,tempmas2,n,N,K);
                else cout << "Перед добавлением элементов необходимо чтобы файл был создан программно." << endl;
                system("pause");
                system ("cls");
                break;
            case 4:
                if (a == true)
                outfile(mas,n,p);
                else cout << "Файл не был создан программно (Не исключено, что файл с таким именем уже существует)." << endl;
                system("pause");
                system ("cls");
                break;
            case 5:
                std::remove("f.dat");
                a = false;
                cout << "Файл удалён" << endl;
                system("pause");
                system ("cls");
                break;
            case 6:
                if (a == true)
                ShellExecute(NULL, TEXT("open"), TEXT("f.dat"), NULL, NULL,SW_RESTORE);
                else cout << "Файл не был создан программно (Не исключено, что файл с таким именем уже существует)." << endl;
                system("pause");
                system ("cls");
                break;
        }
    }
    while (sw != 0);
}
Очень прошу в помощи, т.к. сам не могу понять в чём именно ошибка и мучаюсь уже 2 недели. Заранее благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru