Invalid allocation size: 4294967295 bytes при итерировании по массиву
Пишу программку для работы с множествами (лабораторная). Во время выполнения программы возникает ошибка (описание в заголовке). В программе я впервые использовал указатели и предполагаю, что ошибку допустил именно при работе с ними, но, в чём состоит ошибка, понять не могу.
//Прототипы функций
void getInputSet(int*, int);
void getPredicSet(int*, int);
void getFuncSet(int*, int);
int* sumSet(int*, int, int*, int);
void showSet(int*, int);
int main()
{
int setNumb = 3; //количество множеств
int* size = new int[setNumb]; //размеры множеств
int** A = new int* [setNumb]; //указатель на массив указателей на множества
//Получаем количество элементов А1
cout << "Enter the size of A1: ";
cin >> size[0];
//Создаём указатель на массив элементов
A[0] = new int[size[0]];
getInputSet(A[0], size[0]); //ввод
//Вывод результата
cout << "A1 = ";
showSet(A[0], size[0]);
...
//Ввод и вывод ещё двух множеств
...
//Вычисляем универсум для A1, A2 и А3
int* U; //универсум
int sizeU = size[0]; //размер универсума
for(int i = 0; i < setNumb; i++)
{
sizeU += size[i+1];
int* temp = sumSet(A[i], size[i], A[i+1], size[i+1]); //ОШИБКА ТУТ
if (i == setNumb - 1) //если последняя итерация
{
U = temp;
delete [] temp; //удаляем временный массив
}
}
Подскажите, пожалуйста, в чём же всё-таки проблема. P.S. Не знаю, нужна или нет, но на всякий случай:
//Объединяет множества
int* sumSet(int *set1, int n1, int *set2, int n2)
{
int* temp = new int[n1+n2];
int numbOfNotUnique = 0; //количество не уникальных
//Получение элементов первого множества
for (int i = 0; i < n1; i++)
{
bool isUnique = true;
//проверка на уникальность
for (int j = 0; j < i; j++)
{
if (set1[j] == set1[i])
{
++numbOfNotUnique;
isUnique = false;
break;
}
}
//присвоение уникального значения элементу массива
if (isUnique)
temp[i-numbOfNotUnique] = set1[i]; //индекс с учётом количества неуникальных
}
//Получение элементов второго множества
for (int i = 0; i < n1; i++)
{
bool isUnique = true;
//проверка на уникальность
for (int j = 0; j < i; j++)
{
if (set2[j] == set2[i])
{
++numbOfNotUnique;
isUnique = false;
break;
}
}
//присвоение уникального значения элементу массива
if (isUnique)
temp[i-numbOfNotUnique] = set2[i]; //индекс с учётом количества неуникальных
}
int* res = new int[n1+n2-numbOfNotUnique];
for (int k = 0; k<n1+n2-numbOfNotUnique; k++)
res[k] = temp[k];
delete [] temp;
return res;
}
Источник: Stack Overflow на русском