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

почему выдает ошибку - C++

Восстановить пароль Регистрация
 
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.03.2012, 14:48     почему выдает ошибку #1
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
#include <iostream>
#include  <math.h>
#include <iomanip>
#include <string.h>
using namespace std;
 
struct MARSH
{
  char nac_punkt[100];
  char konec_punkt[100];
  int   nomer;
  int   dlina;
};
void  main(void)
{
     FILE *f1;
    setlocale(LC_ALL,"Russian");
if((f1=fopen("2.dat", "rb+"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    exit(1);
  }
for(int i=0;i<5;i++)
 
       {
           MARSH *pmarsh=new MARSH[i];
            fread(&pmarsh[i],sizeof(MARSH),1,f1);
 
            cout<<i+1<<"-aя запись"<<endl;
            cout<<"начальный пункт  "<<pmarsh[i].nac_punkt<<endl;
            cout<<"название конечного пункта  "<<pmarsh[i].konec_punkt<<endl;
            cout<<"длина  "<<pmarsh[i].dlina<<endl;
            cout<<"номер   "<<pmarsh[i].nomer<<endl;
    
    
}
 
 
 
       fclose(f1);
    system("PAUSE");
 
}
тут я хочу выделять память для структуры считываю с файла и вот
fread(&pmarsh[i],sizeof(MARSH),1,f1);
в pmarsh[i] все считываеться хорошо в отладчике смотрю а следущая строчка кода выбивает повреждена куча
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 14:48     почему выдает ошибку
Посмотрите здесь:

C++ Почему выдает ошибку?
C++ Почему выдает ошибку ?
почему link выдает ошибку? C++
C++ Почему выдает ошибку
Выдает ошибку, не понимаю почему! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
11.03.2012, 14:54     почему выдает ошибку #2
C++
1
2
for(int i=0;i<5;i++)
   MARSH *pmarsh=new MARSH[i];
А delete не сделали ни разу.
C++
1
2
3
4
for(int i=0;i<5;i++)
   MARSH *pmarsh=new MARSH[i];
//...
delete [] pmarsh;
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.03.2012, 15:05  [ТС]     почему выдает ошибку #3
оно ругаеться сразу же в первом прохождении цикла может быть я не правильно выделяю память

Добавлено через 28 секунд
вот сама ошибка ОС Windows инициировала точку останова в 1.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в 1.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит 1.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки

Добавлено через 1 минуту
и выкидывает на эту строчку десасемблера
77A237DD int 3

Добавлено через 7 минут
может поможете мне кажеться что то с читыванием там просходит
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.03.2012, 15:08     почему выдает ошибку #4
sergeu90, 1 проблема с выделением памяти.
2 трындец с считыванием. не сможете так считать. либо читать по полю, либо использовать сериализацию.
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.03.2012, 15:32  [ТС]     почему выдает ошибку #5
а как правильно сделать ?

Добавлено через 40 секунд
в отладчике я смотрел считывало в указатель нормально и поля там были считаны как мне надо

Добавлено через 2 минуты
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
#include <iostream>
#include  <math.h>
#include <iomanip>
using namespace std;
 
struct MARSH
{
  char nac_punkt[100];
  char konec_punkt[100];
  int   nomer;
  int   dlina;
}*p1;
void  main(void)
{
     FILE *f1;
f1 = fopen("2.dat","wb");
 
    setlocale(LC_ALL,"Russian");
    int count;
    cout<<"Cколько записей вы хотите ввести ?"<<endl;
    cin>>count;
    MARSH *pmarsh=new MARSH [count];
    p1=&pmarsh[0];
    
for(int i=0;i<count;i++)
    {
    cin.ignore();
     cout<<i+1<<"-aя запись"<<endl;
    cout<<"Введите название начального пункта"<<endl;
    gets(p1[i].nac_punkt);
    cout<<"Введите название конечного пункта"<<endl;
    gets(p1[i].konec_punkt);
    cout<<"Введите номер  пункта"<<endl;
    cin>>p1[i].nomer;
    cout<<"Введите длину  пункта"<<endl;
    cin>>p1[i].dlina;
 
    fwrite(&p1[i],sizeof(MARSH),1,f1);
    }
 
      fclose(f1); 
if((f1=fopen("2.dat", "rb+"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    exit(1);
  }
for(int i=0;i<count;i++)
 
       {
            fread(&p1[i],sizeof(MARSH),1,f1);
            cout<<i+1<<"-aя запись"<<endl;
            cout<<"начальный пункт  "<<p1[i].nac_punkt<<endl;
            cout<<"название конечного пункта  "<<p1[i].konec_punkt<<endl;
            cout<<"длина  "<<p1[i].dlina<<endl;
            cout<<"номер   "<<p1[i].nomer<<endl;
    
    
}
       fclose(f1);
    system("PAUSE");
 
}
вот код считывает идеально все почему там так не могу сделать

Добавлено через 19 минут
помогите пожалуйста
Yandex
Объявления
11.03.2012, 15:32     почему выдает ошибку
Ответ Создать тему
Опции темы

Текущее время: 06:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru