La prima funzione è errata
bool controllaColonne (int** A, int r, int c)
{
    int i, j, somma, valore = 0;
    
    for(i=0; i<r; i++)
        valore += A[i][0];
 
    for(j=1; j<c; j++){
        somma = 0;
        for(i=0; i<r; i++)
            somma += A[i][j];
                
        if (somma != valore)
            return false;
    }
    
    return true;
}
    int** A = new int*[5];
    A[0] = new int[5]{2,  3,  0,  2, 1};
    A[1] = new int[5]{1,  0, -3,  7, 1};
    A[2] = new int[5]{1,  3,  0,  0, 3};
    A[3] = new int[5]{0, -1,  6, -2, 1};
    A[4] = new int[5]{3,  2,  4,  0, 1};
    
    cout << boolalpha << controllaColonne(A, 5, 5) << endl; // true
    int** A = new int*[5];
    A[0] = new int[5]{2,  3,  0,  2, 0};
    A[1] = new int[5]{1,  0, -3,  7, 1};
    A[2] = new int[5]{1,  3,  0,  0, 3};
    A[3] = new int[5]{0, -1,  6, -2, 1};
    A[4] = new int[5]{3,  2,  4,  0, 1};
    
    cout << boolalpha << controllaColonne(A, 5, 5) << endl; // false