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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> зависает fclose 
:(
    Опции темы
joker332
Дата 30.10.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Драстуйте!Вот написал программ, но она почему то засисает после выполнения закрытия файла(fclose(f1);)!Почему??У меня ище такой вопросик, может я что то напутал с realloc??Посмотри плз!
Код
/

#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"


    typedef struct MyGoods{
        char name[10];
        int id_code;
        char izmer[10];
        int price;
    } Goods;

void Add_to_File(Goods * ptr){
    int z=1;
    FILE *f;
    f = fopen( "read.txt", "a+b");
    fwrite(ptr,sizeof(Goods), 1,f);
    fclose(f);
}
int _tmain(int argc, _TCHAR* argv[])
{
    system("cls");
    int d=0;    
    int nCount=2;
    

    Goods *A;
    //A= new Goods[2];
    
    Goods * ptr =(Goods *)malloc(sizeof(Goods)*nCount);
    printf("programm Goods\r\n");
    printf("\r\nEnter 1: add to file");
    printf("\r\nEnter 2: edit file");
    printf("\r\nPlease enter key 1,2,3,4,5,6,7,8,9,0");

    d=getch();
    
    switch(d){
        case 49:{
            system("cls");
            printf("ADD");
            printf("Enter name ");
            scanf("%s", &ptr->name);
            printf("id code ");
            scanf("%i", &ptr->id_code);
            printf("Enter izmer ");
            scanf("%s", &ptr->izmer);
            printf("Enter price ");
            scanf("%i", &ptr->price);
            Add_to_File(ptr);
            break;
                }
        case 50: {
            printf("enter 2"); 
            int z=1;
            FILE *f1;
            ptr=(Goods*)realloc(ptr, 4);
            f1 = fopen( "read.txt", "r");
            size_t res=fread(ptr,sizeof(Goods), 4,f1);
//            ptr=(Goods*)realloc(ptr, sizeof(Goods)*res);//перероспределения памяти
            //fread(ptr,sizeof(Goods), res,f);
            
            
        //    for( ptr=A; ptr<4+A; ptr++){
            printf("%s", ptr->name);
            printf("%i", ptr->id_code);
            printf("%s", ptr->izmer);
            printf("%i", ptr->price);
            
            fclose(f1);///[color=red]После выполнения закрытия программа зависает!почему???[/color]
        
            
            system("cls");
            //}
            break;
                 }

    }
    //}

    getch();
    

    return 0;
}




PM MAIL   Вверх
17dufa
Дата 30.10.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



joker332, зачем Вам вообще realoc? и чем не устраивает статическое выделение памяти?
и вот это 
Код

f1 = fopen( "read.txt", "r");

лучше заменить вот на это:
Код

f1 = fopen( "read.txt", "rb");


Это сообщение отредактировал(а) 17dufa - 30.10.2009, 15:11
PM MAIL   Вверх
xvr
Дата 30.10.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Зависает после realloc в 60й строке. Нужно так:
Код

ptr=(Goods*)realloc(ptr, 4*sizeof(Goods));


PM MAIL   Вверх
joker332
Дата 2.11.2009, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



17dufa у меня такое задание!(
Я вот немного подправил код и привел только ту часть которая работает некоректно!
При прохождении строчки ptr=(Goods*)realloc(ptr, sizeof(Goods)*(res-1));
вылазит вот такое 
Windows has triggered a breakpoint in laba3_joker.exe.

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

The output window may have more diagnostic information
В чем может быть ошибка!Что я делаю не правильно???
Код

....
        case 50: {
            printf("enter 2"); 
            int z=1;
            FILE *f1;
            f1 = fopen( "read.txt", "r");
            size_t res=fread(ptr,sizeof(Goods), 100,f1);
            ptr=(Goods*)realloc(ptr, sizeof(Goods)*(res-1));
//            ptr=(Goods*)realloc(ptr, sizeof(Goods)*res);
            fread(ptr,sizeof(Goods), res,f1);
            
            
        //    for( ptr=A; ptr<4+A; ptr++){
            printf("%s", ptr->name);
            printf("%i", ptr->id_code);
            printf("%s", ptr->izmer);
            printf("%i", ptr->price);
            
            fclose(f1);
        
            
            system("cls");
            //}
            break;
                 }


PM MAIL   Вверх
xvr
Дата 2.11.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Вот это
Код

size_t res=fread(ptr,sizeof(Goods), 100,f1);
считает в массив ptr 100 штук Goods - к вас там достаточно места для 100 штук?
Далее
Код

            ptr=(Goods*)realloc(ptr, sizeof(Goods)*(res-1));
проверьте, чему тут равен res - если он меньше 1, то в realloc попадет неверный размер (очень большой)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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