Как решить эту проблему (сбросить исключение)

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

void input_count(int*);
int* input_values(int);
void show_result(int**, int);

int main()
{
    int count = 0;
    input_count(&count);
    int* array = input_values(count);
    show_result(&array, count);
    return 0;
}

void input_count(int* count)
{
    do
    {
        printf("배열의 개수는? (0보다 커야합니다) ");
        scanf("%d", count);
    } while (*count <= 0);
}
int* input_values(int count)
{
    int* array = (int*)malloc(sizeof(int) * count);
    for (int i = 0; i < count; ++i)
    {
        printf("%d번째 값은? ", i);
        scanf("%d", array + i);
    }
    return array;
}
void show_result(int** array, int count)
{
    int max = 0, min = INT_MAX;

    int* max_address = NULL, *min_address = NULL;

    for (int i = 0; i < count; ++i)
    {
        if (*array[i] > max)
        {
            max_address = *array + i;
            max = *max_address;
        }
        if (*array[i] < min)
        {
            min_address = *array + i;
            min = *min_address;
        }
    }
    printf("최대 원소의 주소: %p, 값: %d\n", max_address, max);
    printf("최소 원소의 주소: %p, 값: %d\n", min_address, min);
}

Я изучаю программирование только 10 дней, так что моих навыков не хватает. Но я хочу решить эту проблему.

Функция show_result выдает исключение:

Возникло исключение (0x00007FF6BE02596B, Main.exe): 0xC0000005: 0xFFFFFFFFFFFFFFFF 위치를 읽는 동안 액세스 위반이 발생했습니다.

Изображений:

Как решить эту проблему (сбросить исключение)

Как решить эту проблему (сбросить исключение)

Я думаю, что проблема в Null, но я не знаю, что означает обратная ссылка.

не получая никаких ошибок при добавлении, #include <limits.h>

Mods told me to change name 08.01.2023 11:22

У вас слишком много косвенности с show_result(&array, count); и void show_result(int** array, int count). Массив не является массивом указателей.

Weather Vane 08.01.2023 11:24

Минор: int max = 0 должно быть int max = INT_MIN.

Weather Vane 08.01.2023 11:32

Предполагая, что вы решите проблему косвенности, ни max, ни min даже не нужны. Подумайте, на что должны указывать min_address и max_address, прежде чем войти в цикл. Это должно помочь понять, почему min и max лишние.

WhozCraig 08.01.2023 11:37
*array[i] то же самое, что и *(array[i]), а это не то, что вам нужно. Вы хотите (*array)[i]. Тем не менее .... зачем передавать &array на show_result? Просто передайте array напрямую.
Support Ukraine 08.01.2023 11:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет смысла передавать указатель на динамически размещаемый массив по ссылке через указатель на него

show_result(&array, count);

потому что указатель не изменяется внутри функции show_result.

Итак, объявите функцию как

void show_result( const int *, size_t );

и назовите это как

show_result( array, count);

Операторы if

    if (*array[i] > max)

и

    if (*array[i] < min)

использовать недопустимые выражения. Вы должны написать хотя бы лайк

    if ( ( *array )[i] > max)

и

    if ( ( *array )[i] < min)

У вас не будет такой проблемы, если вы объявите функцию, как показано выше.

Также установка переменной max в 0

int max = 0, min = INT_MAX;

не имеет смысла. Поскольку тип элемента массива — int, он может содержать все элементы, заданные отрицательными числами. В этом случае вы получите неверный результат.

Функция может быть определена, например, следующим образом

void show_result( const int *array, size_t count) 
{
    const int *max_address = array; 
    const int *min_address = array;

    for ( size_t i = 1; i < count; ++i )
    {
        if ( *max_address < array[i] )
        {
            max_address = array + i;
        }
        else if ( array[i] < *min_address )
        {
            min_address = array + i;
        }
    }

    if ( count != 0 )
    {
        printf( "최대 원소의 주소: %p, 값: %d\n", ( const void * )max_address, *max_address );
        printf( "최소 원소의 주소: %p, 값: %d\n", ( const void * )min_address, *min_address );
    }
    else
    {
        // output a message that an empty array is passed 
    }
}

Спасибо, сэр. я люблю тебя, я хочу использовать двойной указатель. но вы знаете, что я использую только один указатель. хорошего дня

프린이 08.01.2023 11:57

если я использую const в качестве параметра, это приводит к ошибке. я пытаюсь стереть константу. не ошибка

프린이 08.01.2023 12:01

@프린이 Функция должна быть скомпилирована с квалификатором const первого параметра.

Vlad from Moscow 08.01.2023 12:04

Я понимаю и решаю! спасибо спасибо спокойной ночи!

프린이 08.01.2023 12:28

Другие вопросы по теме