Не могу понять, почему в функции addItem, на строчке table=realloc(table,sizeof(struct Item)*(*n));, я получаю ошибку связанную с памятью...
Для того, что бы получить ошибку, нужно нажать 0 и ввести чего-нибудь.
#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)
{
}