С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
#1

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

11.03.2012, 14:48. Просмотров 632. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос почему выдает ошибку (C++):

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

Почему выдает ошибку - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; void main() { double a; char c; scanf(&quot;%c&quot;, &amp;c); printf(&quot;%c\n&quot;, c); ...

Почему выдает ошибку - C++
#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; #include &quot;windows.h&quot; void...

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

Почему выдает ошибку? - C++
#include&lt;iostream.h&gt; #include&lt;iomanip.h&gt; void main() { float a,e,sum=0.0; int i,j; cout&lt;&lt;&quot;Vvod massiva a:\n&quot;; ...

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

4
dimcoder
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,138
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 / 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 минут
может поможете мне кажеться что то с читыванием там просходит
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
11.03.2012, 15:08 #4
sergeu90, 1 проблема с выделением памяти.
2 трындец с считыванием. не сможете так считать. либо читать по полю, либо использовать сериализацию.
0
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 минут
помогите пожалуйста
0
11.03.2012, 15:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2012, 15:32
Привет! Вот еще темы с ответами:

выдает ошибку E2061-почему - C++
вот часть кода Matrix&lt;U&gt;&amp; mtr; unsigned int i; Helper(Matrix&lt;U&gt;&amp; _mc, unsigned int _i): mtr(_mc), i(_i)...

Подскажите почему выдает ошибку? - C++
#include &lt;iostream&gt; using namespace std; int main(){ int a,b,c,x1,x2,dx; cout&lt;&lt; &quot;Inter a=&quot;; cin &gt;&gt; a; cout&lt;&lt; &quot;Inter b=&quot;;...

почему выдает ошибку: ctrcmp? - C++
# include&lt;iostream&gt; # include&lt;conio.h&gt; # include&lt;string&gt; # include&lt;stdio.h&gt; #include &lt;stdlib.h&gt; using namespace std; struct...

Почему компилятор выдает ошибку? - C++
#include &lt;stdio.h&gt; #include &lt;clocale&gt; typedef enum{ COUNT, POUNDS, PINTS }unit_of_measure; typedef union{ short count;...


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

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

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