Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двумерные массивы 
:(
    Опции темы
bsa
Дата 6.5.2016, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Прочитал статью bsa о динамических массивах в среде программирования си,
программу написал на ее базе. 

Помогите разобраться?
По условиям задания я должен использовать только базовые библиотеки.

По условиям задания, ввод осуществляется с клавиатуры, любой лист, любой книги.
Данные вводятся в двумерный динамический массив по строчно,
после ввода информации в массив (выполняются некоторые действия -  неважно какие)

проблема:
не могу (ввести) вывести ячейки массива
1 программа компилируется без ошибок.
2 выполняется ввод информации в динамический массив!
3 выполняется до вывода информации из массива!(WINDOWS ошибка без номера)
4 выполнял по шаговую трассировку
      процедура ввода информации
        цикл 0 строчка заполнения массива работает как планировалось 
        цикл 1 строчка заполнения массива работает как планировалось
     процедуры вывода информации
        цикл 0 строчка 0 элемент пусто
        цикл 0 строчка 1 элемент пусто  
        ........
        цикл 0 строчка n-1 элемент пусто 
где моя ошибка.

 программа отладчик  

Программа выглядит так:

Код
// ConsoleApplication6.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <malloc.h>
#include <string.h>

int main()
{
    int i, k, a, b, count_str = 0, count_word,count_words=0, lenght, count_len = 0, count_razd = 0;
    
    char razd[6];//объявляем массив разделителей!
    char string[256];//объявляем массив строки!
    
    char ** text;//объявляем двумерный динамический массив текста!
    text = (char**)malloc(count_str*sizeof(char*));//Выделим память для текста
    text[count_str] = (char*)malloc(256 * sizeof(char));//выделим память для строки текста

    int len[256];//объявим массив, где будут храниться длины строк
    while (count_razd == 0)
    {
        printf("input razdeliteli ne bolshe 5:");
        gets_s(razd);//ввод разделителей с клавиатуры не больше 5 слов
        count_razd = strlen(razd);//посчитаем количество разделителей
        printf("%d\n", count_razd);
    }

    do
    {
        printf("Please enter a line of the text: (Пожалуйста введите строку текста: )\n");
        gets_s(string);

        lenght = strlen(string);
        len[count_len] = lenght;//запишем в массив длины строки: значение длины строки
        count_word = 0;

        unsigned int j;
        for (j = 0;j < (strlen(string) - 1);j++)
        {
            for (a = 0;a < count_razd ;a++)
                for (b = 0;b < count_razd;b++)
                    if ((string[j] == razd[a]) && (string[j + 1] != razd[b]))
                        count_word++;
        }
        for (a = 0;a < count_razd;a++)
        {
            if (string[strlen(string)] != razd[a])
                count_word++;
            if (string[0] == razd[a])
                count_word--;
        }
        count_word = count_word / count_razd;//Посчитаем общее количество слов в строке!
        count_words = count_words + count_word;//Посчитаем общее количество слов!
        printf("Kol-vo slov v text = (Кол-во слов в тексте) = %d\n", count_words);
        printf("Dlina str(Длина строки) = %d\n", lenght);

        unsigned int k;
        for (k = 0;k < strlen(string);k++)
        {
            text[count_str][k] = string[k];//Запишем в массив текста строку!
            printf("%c", text[count_str][k]);
        }
        printf("%c", text[0][0]);
        printf("\n");
        count_str++;
        count_len++;

        text = (char**)realloc(text, count_str*sizeof(char*));//переопределим память!
        text[count_str] = (char*)malloc(256 * sizeof(char));

    } while (count_words % 2 != 0);

    for (i = 0;i < count_str;i++)
    {
        for (k = 0;k < len[i];k++)
        {
            printf("%d;%d;\n", i, k);
            //printf("!");
            //printf("%c", text[i][k]);
            //printf("a");
            //string[k] = '0'; //text[i][k];
        }
        //printf("\n");
    }
    /*for (i = 0;i < count_str;i++)
    {
    unsigned int i;
    for (k = 0;k< lan[i];k++)
    free(*(text + k));
    //free(*(text + i));
    }*/
    //free(razd);
    //free(len);
    //free(string);
    //free(text);

    return 0;
}


Модератор: Тема перенесена из привата, автор renat321
PM   Вверх
rudolfninja
Дата 6.5.2016, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Код

text = (char**)malloc(count_str*sizeof(char*));//Выделим память для текста

Проблема в том, что тут вы не выделяете память, т.к. count_str равно нулю.
PM MAIL Skype   Вверх
feodorv
Дата 6.5.2016, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Да, в двух местах нужно поправить:
Цитата(renat321 @  6.5.2016,  09:36 Найти цитируемый пост)
text = (char**)realloc(text, (count_str+1)*sizeof(char*));



Это сообщение отредактировал(а) feodorv - 6.5.2016, 12:51


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.