Чтение недоступных данных из массива и переполнение буфера при записи в этот массив
Хочу отсортировать массив длиной length, которую ввожу с клавиатуры, но выдает предупреждение C6385 об чтении недопустимых значение из массива n: допустимый для чтения обьем равен "length * 4" байт, однако считать можно только "8" байт. Также выдает предупреждение C6386 об переполнении буфера при записи массива n: допустимый для чтения обьем равен "length * 4" байт, однако считать можно только "8" байт. При выводе елементов отсортированного массива, большенство их не выводится. Обьясните пожалуйста как исправить ошибку в коде.
{
int* n, e, t, length;
scanf_s("%d", &length);
n = new int[length];
srand(time(NULL));
for (int i = 0; i < length; i++)
{
n[i] = rand() % 100;
printf("%d\n", n[i]);
}
do
{
t = 0;
for (int i = 1; i <= sizeof(*n) / sizeof(n[0]); i++)
{
if (n[i] < n[i - 1])
{
e = n[i - 1];
n[i - 1] = n[i];
n[i] = e;
t = 1;
}
}
} while (t);
printf("Sorted array\n");
for (int i = 0; i <= sizeof(*n) / sizeof(n[0]); i++)
{
printf("%d\n", n[i]);
}
}
Ответы (1 шт):
При выделении памяти массиву в Си/Си++ размер памяти и количество элементов официально компилятор может не хранить. Работать с количеством элементов выделенной памяти отдано на выбор программистов.
В вашем коде количество храниться в length. Им и пользуйтесь.
Ошибка у вас с индексами. Они должны быть от 0 до length-1.
for (int i = 1; i <= sizeof(*n) / sizeof(n[0]); i++)
правильно так :
for (int i = 1; i < length ; i++)

