#include <iostream>
using namespace std;
struct Bibl
{
char name[20]; //имя автора
char kniga[20]; //имя книги
char god[4]; //год издания
};
Bibl* add(char *name1, char *kniga1, char *god1, Bibl *book1, int &size)
{
size++; // Тут ты увеличил переменную размера массива
Bibl *book;
book = new Bibl[size]; //Выделил память под новый массив (с новой размерностью)
for(int i=0; i<size-1; i++) //Заполняешь старые элементы
{
strcpy(book[i].name, book1[i].name);
strcpy(book[i].kniga, book1[i].kniga);
strcpy(book[i].god, book1[i].god);
}
strcpy(book[size-1].name, name1);
strcpy(book[size-1].kniga, kniga1);
strcpy(book[size-1].god, god1);
delete []book1; // Удаляешь старый массив из памяти...
return book; //Возвращаешь новый.... Думаю загвоздка в этом... ты возвращаешь массив, см. определение main(void)
//Лучше ты бы в этом месте делал так book1 = book;
//И тогда бы твоя функция приобрела вид void add(char *name1, char *kniga1, char *god1, Bibl *book1, int &size)
//И новый массив автоматом у тебя в старый бы попадал
}
Bibl* delet(int del, Bibl *book1, int &size)
{
size--;
Bibl *book;
book = new Bibl[size];
//Тут уж сильно намудрил не стоило так делать и одним циклом можно обойтись
/*
for(int i=0; i<del; i++)
{
strcpy(book[i].name, book1[i].name);
strcpy(book[i].kniga, book1[i].kniga);
strcpy(book[i].god, book1[i].god);
}
for(int i=del; i<size; i++)
{
strcpy(book[i].name, book1[i+1].name);
strcpy(book[i].kniga, book1[i+1].kniga);
strcpy(book[i].god, book1[i+1].god);
}
*/
for (int i=0,Pos =0; i<size+1; i++)
{
if (i != del)
{
strcpy(book[Pos].name, book1[i].name);
strcpy(book[Pos].kniga, book1[i].kniga);
strcpy(book[Pos].god, book1[i].god);
Pos++;
}
}
delete []book1;
return book;
}
int main (void)
{
int ArrSize = 0;
Bibl *books = NULL;
//Вот тут
//Обязательно твой массив думаю ты вот этого не делал в своей программе,
//а так все верно
books = add("1","2","3",books,ArrSize);
books = add("4","5","6",books,ArrSize);
books = delet(1,books,ArrSize);
}