Błąd wykonania programu c++

0

Napisałem pewien program w c++ do zadanego polecenia (po raz pierwszy przekazywałem tablicę jako argument funkcji przez wskaźniki, tu więc może tkwić problem), niestety na ideone program się kompiluje, ale pojawia się komunikat o błędzie wykonania. Po kompilacji w devie program kompiluje się, ale potem się zacina.

Przykładowe wejście:
5
2 1 7 3 2
2
8
11

Wyniki dla powyższego wejścia zwracane na wyjściu:
3
1

#include <iostream>
using namespace std;
 
int LiczbaRoku(int n, int m, int *tab1, int *tab2)
 {
     int dzielniki=0;
     for (int i=0;i<m;i++)
     {
         for (int j=0;j<n;j++) 
         {
             if (tab1[i]%tab2[j]==0) 
             {
                 dzielniki++;
             }
             
         }
         
                                     
     }
     return dzielniki;
 }
 
int main()
{
    int n,m,A[20000], B[10];
    cin>>n;
    for (int i=0;i<n;i++) cin>>A[i];
    cin>>m;
    
    for (int i=0;i<m;i++) cin>>B[i];
    
    cout<<LiczbaRoku (n,m,&A[0],&B[0])<<endl;
    
    
    
} 
0

Jako tab1 przekazujesz adres tablicy A, która ma n pól, a Twój warunek co do i (dalej tab1[i]) to i<m, zatem możesz wychodzić poza obszar zaalokowany. Analogicznie problem może pojawić się przy tab2 (tylko w jednym z nich.)
Poza tym, przekazując adres tablicy pisz A zamiast &A[0].

int dzielniki=0;
for (int i=0;i<n;++i)
 for (int j=0;j<m;++j) 
  if (tab1[i]%tab2[j]==0) 
    ++dzielniki;

Tak nie powinieneś wychodzić poza pamięć, po której możesz się poruszać. Ale pomyślałbym nad lepszymi nazwami, może z nimi sam zauważyłbyś problem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1