2 votes

Comment réparer une violation d'accès à une exception non gérée

J'ai écrit une logique pour trouver les éléments communs de deux tableaux. Mais le programme s'arrête à la condition if en donnant une exception disant violation d'accès en lisant l'emplacement 0x00000002.

#include<stdio.h>
void intersect(int[2][2],int[2][2],int,int);
int main()
{
    int arr1[2][2]={{2,5},{6,8}};
    int arr2[2][2]={{1,2},{8,8}};
row = (sizeof(arr1)/sizeof(arr1[0]));
     col = (sizeof(arr1[0])/sizeof(arr1[0][1]));
intersect(arr1,arr2,row,col);
}

void intersect(int **ptr1, int **ptr2,int row, int col)
{
    int i = 0, j= 0, x = 0, y = 0;

    for(i = 0; i <row ; i++)
    {
        for(j = 0 ; j < col ; j++)
        {
                for(x = 0; x < row ; x++)
                {
                    for(y = 0; y < col ; y++)
                    {
                        if(ptr1[i][j] == ptr2[x][y]) 
                            printf("%d\t",ptr1[i][j]);

                    }
                }
        }
    }
}

Voici ce qu'il dit en détail : Exception de première chance à 0x002b1572 dans Array.exe : 0xC0000005 : Violation d'accès en lecture de l'emplacement 0x00000002. Exception non gérée à 0x002b1572 dans Array.exe : 0xC0000005 : Violation d'accès à la lecture de l'emplacement 0x00000002.

1voto

4386427 Points 19255

Au lieu d'utiliser ptrN en tant que pointeurs doubles, vous pouvez connaître la taille du tableau comme suit :

void intersect(size_t row, size_t col, int a1[][col], int a2[][col])
{
    size_t i = 0, j= 0, x = 0, y = 0;

    for(i = 0; i <row ; i++)
    {
        for(j = 0 ; j < col ; j++)
        {
            for(x = 0; x < row ; x++)
            {
                for(y = 0; y < col ; y++)
                {
                    if(a1[i][j] == a2[x][y]) 
                        printf("%d\t",a1[i][j]);
                }
            }
        }
    }
}

0voto

Achal Points 11272

Quand vous passez 2D array comme argument de la fonction, vous devez attraper avec pointer to an array pas avec le double pointeur car le tableau 2D et le double pointeur ne sont pas les mêmes

    #define r 2
    #define c 2

    void intersect(int (*ptr1)[r], int (*ptr2)[c],int row, int col)
    {
           //function body
    }

0voto

Martymoose Points 43

Cela fonctionne... pas sûr que ce soit ce que vous vouliez.

void intersect(int** ptr1, int** ptr2, size_t row, size_t col)
{
int i = 0, j = 0, x = 0, y = 0;

for (i = 0; i < row; i++)
{
    for (j = 0; j < col; j++)
    {
        for (x = 0; x < row; x++)
        {
            for (y = 0; y < col; y++)
            {
                int a = *(int*)((DWORD)ptr1 + (i * (col * sizeof(int))) + (j * sizeof(int)));
                int b = *(int*)((DWORD)ptr2 + (x * (col * sizeof(int))) + (y * sizeof(int)));

                if (a == b)
                    printf("%d\t", a);
            }
         }
      }
    } 
 }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X