我有一项任务是让用户输入两个数字,这些数字是数组的大小,然后输入数组的元素。然后我必须将它们组合成一个数组并按升序对它们进行排序。问题是我必须只使用动态数组。我已经组合了数组并尝试对它们进行排序,但每次都会崩溃。这是我对数组进行排序的代码:
int *temp;
temp = &array1size;
for (int i = 0; i < *size1ptr; i++)
{
for (int j = 0; j < *size1ptr - 1; j++)
{
if (*(finalarray + j) > *(finalarray + j + 1))
{
temp = &*(finalarray + j);
*(finalarray + j) = *(finalarray + j + 1);
*(finalarray + j + 1) = *temp;
}
}/*End inner for loop*/
}/*End outer for loop*/
IT在这部分崩溃,我无法弄清楚原因。以下是我制作其他数组的其他代码:
int array1size, array2size;
int *array1ptr, *array2ptr, *size1ptr, *size2ptr, *finalarray, *finalptr;
cout << "enter size of first array: ";
cin >> array1size;
size1ptr = &array1size;
array1ptr = new int[*size1ptr];
cout << "Enter array content: ";
for (int i = 0; i < *size1ptr; i++)
{
cin >> *(array1ptr + i);
}
cout << "enter size of second array: ";
cin >> array2size;
size2ptr = &array2size;
array2ptr = new int[array2size];
cout << "Enter array content: ";
for (int i = 0; i < *size2ptr; i++)
{
cin >> *(array2ptr + i);
}
finalarray = new int[*size1ptr];
for (int i = 0; i < *size1ptr; i++)
{
*(finalarray + i) = *(array1ptr + i);
}
for (int i = 0; i < *size2ptr; i++)
{
*size1ptr += 1;
*(finalarray + *size1ptr - 1) = *(array2ptr + i);
}
答案 0 :(得分:2)
正如我的评论中所提到的,你不能动态增加C风格数组的大小(如果你愿意,那就使用std::vector)
在您的情况下,您需要在创建时给出最终数组的最终大小(array1和array2的大小之和),即
finalarray = new int[*size1ptr + *size2ptr];