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

Ошибка. ОС Windows инициировала точку останова в файле - C++

Восстановить пароль Регистрация
 
1Prikol1
0 / 0 / 0
Регистрация: 05.06.2014
Сообщений: 4
05.06.2014, 22:24     Ошибка. ОС Windows инициировала точку останова в файле #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
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
#include <iostream>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <limits>
#include <windows.h>
using namespace std;
int podchet(char *a,char* max,int j);
char* bolshoe(char *a);
 
 
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i = 0,j = 0, m =0;
    char a;
    ifstream F;
    F.open ("G:\\Предметы 2 часть\\Информатика\\ЛР 8\\lol.txt",ios::in);
    ifstream f;
    f.open ("G:\\Предметы 2 часть\\Информатика\\ЛР 8\\lol.txt",ios::in);
    
    if (!F)
        cout << "Фаил не открылся!\n";
    if (!f)
        cout << "Фаил не открылся!\n";
 
        while (!F.eof())
        {
            F >> a;
            j++;
        }
    
        m = j;
    F.close();
    
    char *text = new char[m];
    
    i = 0;
    char sim;
    while (!f.eof())
        {
            f.get(sim);
            text[i] = sim;
            i++;
        }
    text[m] = '\0';
    f.close();
        
 
    
    char* s1;
    s1 = bolshoe(text);
 
    cout<<"Самое большое слово : "<<s1<<endl;
        if (podchet(text,s1,j) == 1) 
       cout<<"Самое большое слово встречается один раз"<<endl;
    else 
        cout<<"Количество повторений самого большого слова : "<<podchet(text,s1,j)<<endl;
 
        system("pause");
    }
    
char* bolshoe(char *text)
{
    
    char* max = new char[200];
    char* ptr=strtok(text,"№;:«»!@#$%^&*() _,-+={}[]\''/?><.");
    max=ptr;
    do {
            if(strlen(max)<strlen(ptr))  
        max=ptr;
    }
    while(ptr=strtok(NULL,"№;:«»!@#$%^&*() _,-+={}[]\''/?><."));
    return max;
}
 
int podchet(char *text,char* s1,int j)
{
 
        int r = 0,q;
        q=strlen(s1);
    int poisk = 0;
    for(int i1 = 0; i1 < j+1; i1++)
    {
        if(text[i1] == s1[poisk])
        {
            if(poisk == q)
            {
                r++;
                poisk = 0;
            }
            else
                poisk++;
        }
        else
            poisk = 0;
 
    }
    return r;
}
ну и вот , что пишет вижуалка

HEAP[laba8v2.exe]: Invalid address specified to RtlValidateHeap( 00720000, 00724C80 )
ОС Windows инициировала точку останова в laba8v2.exe.

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

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

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 768
Регистрация: 27.09.2012
Сообщений: 16,845
Записей в блоге: 2
Завершенные тесты: 1
05.06.2014, 22:27     Ошибка. ОС Windows инициировала точку останова в файле #2
C++
1
2
3
char *text = new char[m];
//...
text[m] = '\0';
Запись за пределы выделенной памяти
1Prikol1
0 / 0 / 0
Регистрация: 05.06.2014
Сообщений: 4
05.06.2014, 23:14  [ТС]     Ошибка. ОС Windows инициировала точку останова в файле #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Запись за пределы выделенной памяти
Спасибо за помощь.
Ну а что сделать то , что бы избежать??
Pjeroo
Землянин
 Аватар для Pjeroo
33 / 33 / 12
Регистрация: 15.01.2013
Сообщений: 313
05.06.2014, 23:54     Ошибка. ОС Windows инициировала точку останова в файле #4
1Prikol1, не писать за пределы Вы выделяете память для m элементов, а пытаетесь записать в m+1-ый элемент.
1Prikol1
0 / 0 / 0
Регистрация: 05.06.2014
Сообщений: 4
06.06.2014, 01:31  [ТС]     Ошибка. ОС Windows инициировала точку останова в файле #5
Спасибо всем за помощь.Ошибку нашел,
C++
1
2
3
4
5
while (!F.eof())
        {
            F >> a;
            j++;
        }
она собственно здесь, программка неправильно считает количество входных символов.
Кто подскажет как это исправить??

Добавлено через 2 минуты
Точнее так, считает все без пробелов.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 768
Регистрация: 27.09.2012
Сообщений: 16,845
Записей в блоге: 2
Завершенные тесты: 1
06.06.2014, 01:33     Ошибка. ОС Windows инициировала точку останова в файле #6
C++
1
a=F.get();//F >> a;
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 575
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
06.06.2014, 01:39     Ошибка. ОС Windows инициировала точку останова в файле #7
...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 14:15     Ошибка. ОС Windows инициировала точку останова в файле
Еще ссылки по теме:

Компилятор ошибка (вызвали срабатывание точки останова) C++
C++ Ошибка (вызвали срабатывание точки останова)
Windows инициировала точку останова при очистке динамической памяти C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.06.2014, 14:15     Ошибка. ОС Windows инициировала точку останова в файле #8
Цитата Сообщение от 1Prikol1 Посмотреть сообщение
Ошибку нашел,
Цитата Сообщение от 1Prikol1 Посмотреть сообщение
она собственно здесь, программка неправильно считает количество входных символов.
Как ни считай, но если так напишешь:
C++
1
2
3
char *text = new char[m];
//...
text[m] = '\0';
, то
Цитата Сообщение от Croessmah Посмотреть сообщение
Запись за пределы выделенной памяти
Yandex
Объявления
06.06.2014, 14:15     Ошибка. ОС Windows инициировала точку останова в файле
Ответ Создать тему
Опции темы

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