powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / [Си]Ошибка при использовании Realloc
2 сообщений из 2, страница 1 из 1
[Си]Ошибка при использовании Realloc
    #38912589
iluxa1810
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу понять, почему в функции addItem, на строчке table=realloc(table,sizeof(struct Item)*(*n));, я получаю ошибку связанную с памятью...
Для того, что бы получить ошибку, нужно нажать 0 и ввести чего-нибудь.
Код: plaintext
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.
#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;
	void (*P[4])(struct Item *,int*)={addItem,deleteItem,searchItem};
	table=malloc(sizeof(struct Item));
	puts("0 add\n1 delete \n2 search \n");
	for (;;) 
	{
		scanf("%d",&ctrl);
		if (ctrl>5) 
		{
			break;	
		}
		(*P[ctrl])(&table,&n);
	}
	return 0;
}
void addItem(struct Item *table,int *n)
{
int key,release=1;
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;
	table[n-1].release;
	table[n-1].info;
 }
 else return;
}
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)
{

}
...
Рейтинг: 0 / 0
[Си]Ошибка при использовании Realloc
    #38912683
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Приведи в порядок форматирование. Читать невозможно
2) Посчитай количество элементов в массиве функций, в константном массиве инициализации и сравни с максимальным кодом функции
3) Открой для себя разницу между sometype *variable и sometime **variable. В данном случае, тебе нужно второе... (потому и realloc падает что ты с уровнем ошибся).
4) Вопросы по Си обсуждаются в С++ форуме.

Модератор: Тема перенесена из форума "Программирование".
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / [Си]Ошибка при использовании Realloc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]