Ошибка при поиске указателя на среднее арифметическое матрицы

Необходимо найти элемент матрицы, равный среднему арифметическому всех элементов. Делаю через указатели, дабы не вводить глобальные переменные. Возникает следующая ошибка. Память под матрицу выделяю динамически, заполняю из файла, при необходимости кусочки могу добавить. Скрин ошибки

int** findAvg(int** matrix, int avg, int lines, int columns) {
    int** endLines = matrix + lines - 1; //указатель на последнюю строку матрицы
    int* endColumns = *matrix + columns - 1; //указатель на последний элемент строки
    while (matrix) {
        while (*matrix) {
            if ((**matrix) == avg) return matrix;
            if (*matrix == endColumns) break; //защита от переполнения строки
            *matrix++;
        }
        if (matrix == endLines) break; //защита от переполнения матрицы
        matrix++;
    }
    return NULL;
}

Ответы (1 шт):

Автор решения: AlexGlebe

Вычислять последний элемент endColumns строки нужно заново, на кажду строку другая. После while(matrix) {.

int** findAvg(int** matrix, int avg, int lines, int columns) {
    int** endLines = matrix + lines - 1; //указатель на последнюю строку матрицы
    // было здесь

    while (matrix) {
        // перенесли сюда
        int* endColumns = *matrix + columns - 1; //указатель на последний элемент строки

        while (*matrix) {
            if ((**matrix) == avg) return matrix;
            if (*matrix == endColumns) break; //защита от переполнения строки
            *matrix++;
        }
        if (matrix == endLines) break; //защита от переполнения матрицы
        matrix++;
    }
    return NULL;
}
→ Ссылка