Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Hellko
6 / 6 / 2
Регистрация: 17.11.2012
Сообщений: 65
1

Динамическая память для структур

17.11.2012, 15:24. Просмотров 372. Ответов 0
Метки нет (Все метки)

Задача такова: Создать текстовый файлик в виде Базы Данных, данные из него заносить в структуру при запуске программы. С возможностью добавлять новые записи.

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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
struct pt {
    char name[30];
    char shortname[3];
    int num;
    float mass;
 
};
 
 
void input(pt*&,FILE*,int);
void display(pt*,int);
 
 
 
int main() {
    FILE *h; int count=0;
    h=fopen("bd.txt","r");
    pt *table;
 
    if(h) {
        while(!feof(h)) {
            input(table,h,count); //добавить новую запись
            count++;
        }
 
 
    } else {
        printf("BD not Found. Created new BD.");
    }
    display(table,0);
    display(table,1);
 
    fclose(h);
    free(table);
 
}
 
void input(pt*& table, FILE *h, int count) {
    if(count) table=(pt*)realloc(table,count*sizeof(pt)); else table=(pt*)calloc(1,sizeof(pt));
//Если count==0 то создать памяти для 1 элемента типа pt. Если не ноль то добавить к текущему массиву еще 1 элемент. 
   if(h) {
        fscanf(h,"%d %s %s %f\n",&table[count].num,&table[count].name,&table[count].shortname,&table[count].mass);
    } else {
        ;
    }
 
}
 
void display(pt* table,int num) {
    printf("[%3d] %s (%s) Mass: %7.4f\n",table[num].num,table[num].name,table[num].shortname,table[num].mass);
}
Ошибка скорее всего в выделении памяти, говорит: "приложение остановлено т.к. оно получило сигнал от ОС: SIGSEGV (Segmentation Fault)"

Содержимое файла:
Код
1 Hydrogen H 1.0023
2 Helium He 2.0123
Добавлено через 10 минут
Все заработало. Нашел ошибку в том что делал так:
C++
1
table=(pt*)realloc(table,count*sizeof(pt));
а надо так:
C++
1
table=(pt*)realloc(table,(count+1)*sizeof(pt));
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2012, 15:24
Ответы с готовыми решениями:

Общая динамическая память для разных функций
Ниже код, ожидал, что адреса будут одинаковые, но это не так, хочу выделить...

Как выделить память для массива структур?
выделить пямять для такой структуры на n элементов typedef struct coordinates...

Динамическая память
Ребятки-котятки, помогите пожалуйста, как сделать так, чтобы Массив...

Динамическая память
Есть вот такой код: struct MyStruct { int* i; int size; } typedef...

Динамическая память
Помогите решить задание с динамикой. Идей никаких нету. Разработать...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2012, 15:24

Указатели и динамическая память
1. Создать массив с использованием указателя. Заполнить созданный массив...

Динамическая память. Массивы
Есть массив А. Нужно сформулировать новый массив Б с индексов положительный...

Динамическая память и структуры
не получается считать данные из stdin есть структура: typedef struct...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru