Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Hellko
6 / 6 / 1
Регистрация: 17.11.2012
Сообщений: 65
#1

Динамическая память для структур - C (СИ)

17.11.2012, 15:24. Просмотров 354. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамическая память для структур (C (СИ)):

Общая динамическая память для разных функций - C (СИ)
Ниже код, ожидал, что адреса будут одинаковые, но это не так, хочу выделить память в одной функции, а использовать в другой. #include...

Как выделить память для массива структур? - C (СИ)
выделить пямять для такой структуры на n элементов typedef struct coordinates { float x; float y; float z;}line_segment;

Указатели и динамическая память - C (СИ)
1. Создать массив с использованием указателя. Заполнить созданный массив значениями согласно варианту. Для обращения к элементам массива...

Динамическая память и структуры - C (СИ)
не получается считать данные из stdin есть структура: typedef struct { char name; int grade; } student; есть функция...

Одномерный массив.Динамическая память - C (СИ)
b) Динамическая память. Одномерный массив. Дан массив целых чисел. Поменять местами все значение элементов с четными индексами с...

Динамическая память выделение и очистка - C (СИ)
Здравствуйте ) помогите разобраться нашёл на сайте простенькую программку, которая сначала выделяет место для строк, вводимых...

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

Динамическая память - найти ошибки в коде - C (СИ)
В чем моя ошибка с выделением и использованием динамич. памяти?(На выходе выдает черт знает что) #include &quot;stdafx.h&quot; #include...

Почему динамическая память распределяет только 4 байта? - C (СИ)
Всем привет! вопрос в том, почему динамическая память распределяет не 56 байт а только 4? Код: #include &lt;stdio.h&gt; #include...

Ошибка при передаче строки (списки и динамическая память) - C (СИ)
задача кода принять из файла имена и если они начинаются на A вывести на экран, написал пока без файла, столкнулся с проблемой, int выводит...

Динамическая память: найти количество элементов массива, лежащих в заданном диапазоне - C (СИ)
Прошу помощи у знатоков для написания небольшой программы. Нужно в одномерном массиве, состоящем из n вещественных элементов,...


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

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

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