C/C++

C++ динамический массив

Здравствуйте. Должно находить самый отрицательный элемент в массиве.
Логика следующая в функции GetLittleArr:
Если элемент массива меньше следующего, тогда записываем её в переменную. И так каждую итерацию. Но почему-то функция вернула -22.
И общие наставления по коду, пожалуйста
GetLittleArr: i == count - 1, в сравнении arr[i] < arr[i+1] происходит обращение к arr[count], находящемуся вне выделенной памяти
получаем неопределённое поведение, дальше программу можно не смотреть
если это не шиндоус, такие ошибки можно легко ловить address sanitizer-ом

но давай предположим, что неопределенного поведения нет и из arr[count] каким-то образом прочитался, к примеру, 0
тогда arr[i] == -22, arr[i+1] == 0, получаем, что arr[i] < arr[i+1], идём внутрь ифа, i == count-1, выводим arr[i] (который -22)
т. е. программа работает в точности по твоему описанию, ошибки я не вижу
ВД
Вадим Дерягин
36 960
Лучший ответ
Владимир Калашников Только сейчас до меня дошли ваши слова.
То-есть я выхожу за пределы массива записью arr[i+1] где i уже последний элемент массива и обращаемся к несуществующему элементу. Хочется сделать проверку, но в голову ничего не лезет. Как можно разрешить эту ситуацию?
#include "algorithm"
#include "iostream"
#include "cstdlib"
#include "ctime"
using namespace std;
int GetLittleArr(int *a, int n){return *min_element(a,a+n);}
int main(){
int n; cout<<"n: "; cin>>n; int *a=new int[n]; srand(time(NULL));
for_each(a,a+n,[](int& i){cout<<(i=rand()%199-99)<<' ';});
cout<<"\nMin="<<GetLittleArr(a,n)<<'\n'; delete []a;}
Николай Чумаков P.S. если for_each(a,a+n,[](int& i) { cout<<(i=rand()%199-99)<<' '; } ); сложно понять, можно заменить на for(int i=0;i< n;i++)cout<<(a[i]=rand()%199-99)<<' ';
«Если элемент массива меньше следующего» != «самый отрицательный элемент в массиве»
для варианта -1 -22 -44 тут ни один элемент не меньше следующего
Так тебе описали выше... так что не буду больше писать, найди подобный код в нете
Я не совсем понял, зачем Вы так усложнили функцию по нахождению вашего минимального элемента. Посмотрите на мой код, если что-то будет не понятно, готов ответить. На будущее: лучше используйте вектора, они намного удобнее динамических массивов в плюсах. В интернете про них куча информации. Признаюсь честно, пользуюсь только ими. Также я советую вам соблюдать кодстайл: ставить пробелы между операторами. В некоторых местах Вы их пропускаете. Но это уже так, придирки :)
Владимир Калашников Вы правы, спасибо большое). Я посмотрю что такое вектора, но как нормальный программист, хочу уметь работать и с динамическими массивами