Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
#1

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

11.03.2012, 14:48. Просмотров 659. Ответов 4
Метки нет (Все метки)

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] все считываеться хорошо в отладчике смотрю а следущая строчка кода выбивает повреждена куча
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 14:48
Ответы с готовыми решениями:

Почему выдает ошибку?
#include&lt;iostream.h&gt; #include&lt;iomanip.h&gt; void main() { float a,e,sum=0.0;...

почему выдает ошибку
#include &lt;iostream&gt; #include &lt;cmath&gt; int main() { const int SIZE=10;...

Почему не выдает ошибку?
Вопрос может показаться странным. Но почему for(int *i=min; i&lt;min2; ++i){...

Почему выдает ошибку?
Выдает ошибку: In function 'int main()': 6:30: error: 'strlen' was not...

Почему выдает ошибку ?
#include &lt;iostream&gt; using std::cout; using std::cin; using std::endl;...

4
dimcoder
Полярный
467 / 440 / 157
Регистрация: 11.09.2011
Сообщений: 1,142
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;
0
sergeu90
27 / 28 / 5
Регистрация: 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 минут
может поможете мне кажеться что то с читыванием там просходит
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
11.03.2012, 15:08 #4
sergeu90, 1 проблема с выделением памяти.
2 трындец с считыванием. не сможете так считать. либо читать по полю, либо использовать сериализацию.
0
sergeu90
27 / 28 / 5
Регистрация: 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 минут
помогите пожалуйста
0
11.03.2012, 15:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2012, 15:32

Почему выдает ошибку
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt;...

Почему выдает ошибку?
Вот исходный код: // ConsoleApplication1.cpp: определяет точку входа для...

Почему не выдает ошибку?
здравствуйте, я недавно начал осваивать с++. Когда я игрался с типами данных,...


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

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

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