0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 1
1

Программа, считывающая словарь в динамический массив char, прерывает работу

08.03.2016, 15:24. Показов 670. Ответов 1

Здравствуйте!
Я пишу словарь и работаю над функцией, которая подсчитывает количество строк в файле в переменную counter, затем создает динамический массив размера counter*3 и считывает в него файл. Сейчас для теста прошу программу вывести мне словарик (он пока маленький) на экран. Когда я её запускаю, она собирается (MSVS2015), запускается, благополучно выводит словарик на экран (то есть, все, что надо, считалось в наш чудесный массив), а потом внезапно прекращает работу из-за неизвестной ошибки. Когда запускаю отладчик, он мне говорит: "Необработанное исключение по адресу 0x0FFC3F7D (ucrtbased.dll) в anotherone.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFCD.

Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно."

Код:
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
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#pragma warning(disable:4996)
void main()
{
    FILE* in = fopen("dictionary.txt", "r+");
 
    size_t counter = 0;
    int just, pre = EOF; 
    
    while ((just = fgetc(in)) != EOF)
    {
        pre = just;
 
        if (just == '\n')
            ++counter;
 
        putchar(just);
    }
    if (pre != '\n')
    {
        ++counter; 
    }
    char **dict;
    dict = new char*[counter];
    for (int i = 0; i < counter; i++)
        dict[i] = new char[3];
    for (int i = 0; i < counter; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            fscanf(in, "%s ", &dict[i][j]);
            printf("%s", dict[i][j]);
        }
    }
    _getch();
}
Возможно, вы подскажете, где спряталась ошибка? Заранее спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2016, 15:24
Ответы с готовыми решениями:

Динамический массив из char
Скриншот с ошибкой int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, &quot;Russian&quot;); ...

Скрипт вызывает ошибку и прерывает работу всех последующих скриптов
Подскажите. У меня вот этот скрипт вызывает ошибку в отладчике и прерывает работу всех следующих за...

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

Двумерный динамический массив типа char
Как создать двумерный динамический массив типа char, в который будут записываться слова разной...

1
Вездепух
Эксперт CЭксперт С++
10312 / 5602 / 1530
Регистрация: 18.10.2014
Сообщений: 13,675
08.03.2016, 21:05 2
Цитата Сообщение от katharialva Посмотреть сообщение
dict = new char*[counter];
В языке C нет никакого 'new'.

Добавлено через 1 минуту
Цитата Сообщение от katharialva Посмотреть сообщение
anotherone.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFCD.
Так а у вас все слова в словаре длиной не более 2 букв? Точнее вот это вот

C
1
2
3
4
5
for (int j = 0; j < 3; j++)
{
  fscanf(in, "%s ", &dict[i][j]);
  printf("%s", dict[i][j]);
}
- это вообще что-то непонятное. Вы читаете каждое слово словаря фактически в один символ массива? Это бессмыслица. Каждое последующее слово перетирает хвост предыдущего и любое слово длины более 2 вылетает за пределы массива длины 3 и уничтожает окружающую память. Разумеется, все падает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2016, 21:05
Помогаю со студенческими работами здесь

двумерный динамический массив типа char
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;windows.h&gt; using namespace std; void...

Создать двумерный динамический массив char
Нужно сделать динамический двумерный массив типа char , Надо чтобы было только через char вот...

Динамический двумерный массив char через new?
В общем, нужно создать n-ое количество двухсимвольных строк char. Как правильно выделить память под...

Как реализовать динамический массив char?
как реализовать динам.мас.Char? подпустим я ввожу &quot;привет мир мооаао валвал ваддва вдавад &quot;,как...


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

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

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