Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C (СИ) Построить таблицу, в каждой строке которой будут находиться координаты соответствующих пар скобок https://www.cyberforum.ru/ c-beginners/ thread1401461.html
Пусть имеется текст, сбалансированный по круглым скобкам. Необходимо построить таблицу, в каждой строке которой будут находиться координаты соответствующих пар скобок. Т.е. для текста...
Ошибка при при использовании realloc C (СИ)
В методе AddItem вылетает ошибка доступа к памяти... С чем это может быть связано? #pragma hdrstop #pragma argsused #include <stdio.h> #include <stdlib.h> #ifdef _WIN32 #include <tchar.h>...
C (СИ) Найти номера строк матрицы, все элементы которых равны нулю https://www.cyberforum.ru/ c-beginners/ thread1401347.html
Дана квадратная целая матрица. Найти номера строк: все элементы которых равны нулю;
C (СИ) Программа должна вычислять введенное треугольное число и позволяя пользователю многократный ввод https://www.cyberforum.ru/ c-beginners/ thread1401327.html
Всем привет! Программа должна вычислять введенное треугольное число и позволяя пользователю многократный ввод. Проблема в том что, если ввести следующее число то, она складывается с первым,...
C (СИ) Ввести формулу с клавиатуры и по этой формуле составить массив
Здравствуйте, задача такая, нужно ввести формулу с клавиатуры и по этой формуле составить массив, не знаю какую функцию использовать и какой спецификатор формата выбрать.
C (СИ) Считать матрицу из файла, не считывая матрицу в память Здравствуйте! Не получается сделать следующие задание: В текстовом файле на первой строке расположены данные о размерности матрицы – количество строк, количество столбцов, номер заданной строки.... https://www.cyberforum.ru/ c-beginners/ thread1401288.html
C (СИ) Вывод в консоль ФИО и возраст людей по дате рождения https://www.cyberforum.ru/ c-beginners/ thread1401271.html
Нужно ввести в диалоговом режиме ФИО 5 людей и даты их рождения, после вывести в консоль в виде таблицы ФИО и возраст(!) этих людей. Я в программировании мало чего понимаю, пока только учусь, прошу...
C (СИ) Определить, сколько букв "о" есть в строке
нужна програма Вычислить сколько букв "о" есть в имени
C (СИ) Работа с таблицами При создании программы, которая работает с таблицей, я столкнулся с проблемой-Я вынужден всюду волочить за собой указатель на таблицу и количество элементов. К примеру я сделал метод enterData, где... https://www.cyberforum.ru/ c-beginners/ thread1401236.html C (СИ) Исправить ошибки в коде Перескакивает через строчку. Подскажите пожалуйста что не так? #include <stdio.h> int main () { int x,y,z,d,i,o; printf("Хочешь немного уличной магии? О_о\n"); printf ("1=Да,да Сенсей..... https://www.cyberforum.ru/ c-beginners/ thread1401234.html
Создать массив указателей на функции к функциям, которые имеют разное число и типы параметров? C (СИ)
Можно ли создать массив указателей на функции к функциям, которые имеют разное число и типы параметров?
C (СИ) Сколькими различными способами можно грани куба раскрасить в четыре цвета https://www.cyberforum.ru/ c-beginners/ thread1401155.html
Сколькими различными способами можно грани куба раскрасить в четыре цвета. Вывести на экран возможные варианты. Подскажите хотя бы общий ход мысли. Зарание спасибо.
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
0

Realloc внутри функции - C (СИ) - Ответ 7375955

22.03.2015, 22:13. Показов 2241. Ответов 2
Метки (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема заключается в следующем:
Когда я первый раз попадаю в функцию addItem и делаю в ней realloc указателя на структуру, а потом еще присваиваю значения, то после выхода из функции я вижу эти значения.
Когда я второй раз попадаю в функцию, проделываю эти же действия, то после этого у меня отображаются значения после первого раза, а от второго раза остаются только 0.
По задумке, после каждой итерации у меня должен пополняться элементами массив за счет realloс, но почему-то не работает.

realloc происходит в методе EnterData.
Если кто-нибудь захочет скомпилировать программу и посмотреть на результаты, то нужно вбить 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#pragma hdrstop
#pragma argsused
 
#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif
 
#define SIZE 10
struct Item{
     int key;
     int release;
     char *info;
    };
 
void addItem(struct Item *,int*);
void deleteItem(struct Item *,int*);
void searchItem(struct Item *,int);
int enterData(int*,int*,char*,struct Item*,int);
int CheckKey(int ,struct Item *,int);
int CheckRelease(int ,int ,struct Item *,int);
int _tmain(int argc, _TCHAR* argv[])
{
    struct Item *table;
    int ctrl,n=0,i;
    void (*P[4])(struct Item *,int*)={addItem,deleteItem,searchItem};
    table=malloc(sizeof(struct Item));
    for (;;)
    {
        puts("0 add\n1 delete \n2 search \n");
        scanf("%d",&ctrl);
        if (ctrl>5) 
        {
            break;  
        }
        (*P[ctrl])(table,&n);
        for (i=0; i<=n-1; i++) {
            printf("%d\n",table[i].key);
        }
    }
    return 0;
}
void addItem(struct Item *table,int *n)
{
int key,release;
char *info=malloc(sizeof(char)*50);
 if (*n==SIZE)
 {
    puts("Table is full. can not continue \n");
    return;
 }
 if(enterData(&key,&release,info,table,*n))
 {
    (*n)++;
    table=realloc(table,sizeof(struct Item)*(*n));
    table[*n-1].key=key;
    table[*n-1].release=release;
    table[*n-1].info=info;
 }
}
 
int enterData(int *key,int *release, char *info,struct Item *table,int n)
{
int a;
puts("Enter key: ");
scanf("%d",key);
if (CheckKey(*key,table,n)==2) {
    puts("This item already exists. The number of releases exhausted");
    return 0;
}
if (CheckKey(*key,table,n)==1) {
    puts("This item already exists. You can add 1 realese");
}
puts("\n Enter release: ");
do
    {
    scanf("%d",release);
    }
while (CheckRelease(*key,*release ,table,n)==0);
puts("\n Enter info(50 chars): \n");
fflush(stdin);
gets(info);
return 1;
}
 
int CheckKey(int key,struct Item *table,int n)
{
 
int i,cnt=0;
if (n==0) {
    return 0;   
}
for (i = 0; i <= n-1; i++) {
    if(table[i].key==key)
        {
            cnt++;
        }
}
return cnt;
}
int CheckRelease(int key,int release ,struct Item *table,int n)
{
int i;
if (n==0) {
    return 1;   
}
for (i = 0; i <= n-1; i++)
    {
    if(table[i].key==key)
        {
            if (table[i].release==release) 
            {
              puts("Thies element have this release. Enter another release.");
              return 0; 
            }
            return 1;
        }
    }
}
 
void deleteItem(struct Item *table,int *key)
{
 
}
 
 
void searchItem(struct Item *table,int key)
{
 
}


Вернуться к обсуждению:
Realloc внутри функции C (СИ)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2015, 22:13
Готовые ответы и решения:

Realloc в функции
Есть функция void read_line(char *adress) { char temp = '1'; unsigned long long int...

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

Почему так себя ведёт программа? Функции: malloc(), realloc(), free()
Почему большинство значений в output 0 и несколько из значений не равно 0? /* *...

Динамическое выделение для массива структур. Программа вылетает без ошибок на использовании функции realloc
Здесь код: ссылка В массив структур нужно записать новый элемент, выделить для него память....

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2015, 22:13
Помогаю со студенческими работами здесь

функции на основе realloc, malloc
Подскажите как сократить написание &quot;realloc&quot;, а то надоели эти писанины))) вот сделал уже...

В чем преимущества new и delete и могут ли они действительно заменить функции calloc, malloc, free, realloc?
Язык программирования C поддерживает функции динамического управления пямятью: calloc, malloc,...

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using...

Динамическое выделение памяти внутри функции (что вернуть из функции, если не удалось выделить память?)
такое дело, есть функция, которая выполняет некоторую операцию, функция при успешном выполнении...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru