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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> что то с выделением памяти 
V
    Опции темы
Артем125
Дата 13.11.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

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



Есть задача при нажатии любой клавиши поочередно выводиться строка из текста в массиве s

Код

FILE * fi;
    if ((fi = fopen("d:\\v.dat","r")) == 0)
    {
        std::cout << "Ошибка открытия входного файла";
        return 1;
    }
    
    const int b_n = 70;
    char buf[b_n];

    const int n = 1000;
    char * s = new char[n];
    *s = '\0'; 
    while (fgets(buf,b_n,fi))
    {
        strncat(s,buf,n);
    }

    
    char *p = new char[n];
    strcpy(p,s);

    int i = 0;
    char * bstr = new char[n];
    do
    {
        if (getch())
        {
            if (p != NULL)
            {    
                strcpy(bstr, p);
                std::cout << strtok(bstr,"\n");
                
            }
        }
        if ((i++) > 5) break;
    }
    while (p = strchr(p,'\n'), p++);
    
    delete []bstr;
    delete []p;
    delete []s;


а вот ругается
Код

Windows has triggered a breakpoint in 1_1.exe.

This may be due to a corruption of the heap, and indicates a bug in 1_1.exe or any of the DLLs it has loaded.

The output window may have more diagnostic information


Это сообщение отредактировал(а) Артем125 - 13.11.2009, 16:26
PM MAIL   Вверх
azesmcar
Дата 13.11.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



а где тут выделение памяти?
очень подозрительно выглядет этот кусок кода
Код

char *p = s;
strcpy(p,s);

это что? копирование в самого себя?
PM   Вверх
Артем125
Дата 13.11.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

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



ну да, надоб вот так 
char *p = new char;
strcpy(p,s);

ошибка другая Unhandled exception at 0x7c812aeb in 1_1.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0012fda4..
PM MAIL   Вверх
azesmcar
Дата 13.11.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Артем125 @  13.11.2009,  15:40 Найти цитируемый пост)
ну да, надоб вот так 
char *p = new char;
strcpy(p,s);

ошибка другая Unhandled exception at 0x7c812aeb in 1_1.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0012fda4.. 

это что? создание одного символа? покажи весь код, ничего непонятно,
PM   Вверх
Артем125
Дата 13.11.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

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



добавил код в первое сообщение

Это сообщение отредактировал(а) Артем125 - 13.11.2009, 15:47
PM MAIL   Вверх
azesmcar
Дата 13.11.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



нафига столько кода для такой простой задачки? зачем сперва загружать а потом выводить? читай из файла и выводи одновременно.
И зачем использовать FILE, fgets и тому подобное если в C++ есть ifstream, string?

Добавлено через 1 минуту и 12 секунд
Цитата

char *p = new char;

тут наверное должно быть
Код

char *p = new char[n];

так как ты копируешь массив[1000] в выделенный один байт.
PM   Вверх
Артем125
Дата 13.11.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.9.2009

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



Вот полностью рабочий код

Код

    FILE * fi;
    if ((fi = fopen("d:\\v.dat","r")) == 0)
    {
        std::cout << "Ошибка открытия входного файла";
        return 1;
    }
    
    const int b_n = 70;
    char buf[b_n];

    const int n = 1000;
    char * s = new char[n];
    *s = '\0'; 
    while (fgets(buf,b_n,fi))
    {
        strncat(s,buf,n);
    }

    char *p = new char[n];
    *p = '\0'; 
    strcpy(p,s);

    char *bstr = new char[n];
    *bstr = '\0';

    int i = 0;
    do
    {
        if (getch())
        {
            if ((p != NULL)&&(bstr != NULL))
            {    
                strcpy(bstr, p);
                std::cout << strtok(bstr,"\n");
            }
        }
        if ((i++) > 5) break;
    }
    while (p = strchr(p,'\n'), p++);
    
    delete []bstr;
    delete []s;


Это сообщение отредактировал(а) Артем125 - 13.11.2009, 19:43
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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