28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
1

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

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

Author24 — интернет-сервис помощи студентам
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2012, 14:48
Ответы с готовыми решениями:

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

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

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

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

4
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
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
28 / 29 / 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
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.03.2012, 15:08 4
sergeu90, 1 проблема с выделением памяти.
2 трындец с считыванием. не сможете так считать. либо читать по полю, либо использовать сериализацию.
0
28 / 29 / 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2012, 15:32
Помогаю со студенческими работами здесь

Почему выдает ошибку
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; void main() { double a; char c; ...

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

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

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


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

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

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