2011-08-07 7 views
0

En C, lorsque j'essaie d'exécuter ce programme, j'obtiens un "défaut de segmentation". Qu'est-ce que ça veut dire? Comment puis-je réparer cela?Erreur de segmentation

Tag tagNewDataPoint(const double x[MAX_DIMENSION], 
        const double w[MAX_DIMENSION], 
        const int d) 
{ 
    int separator_arr,point_arr; 
    double result = 0; 
    for (separator_arr=0;separator_arr<d;separator_arr++) 
    { 
     for (point_arr=0;point_arr<d;separator_arr++) 
     { 
      result += w[separator_arr]*x[point_arr]; 
     } 
    } 

    if (result <0) 
    { 
     return NEG; 
    } 
    else if (result >0) 
    { 
     return POS; 
    } 
    else 
    { 
     return NOTAG; 
    } 
} 
+0

En tant que point de style, vous pourriez faire mieux pour nommer vos variables d'index quelque chose comme "point_ind" au lieu de "point_arr". Appeler quelque chose "point_arr" donne l'impression qu'il s'agit d'un tableau, ce qui bien sûr n'est pas dans ce cas. –

+0

@sinsedrix J'ai essayé de l'éditer, il a montré écrire plus de lignes, votre question est remplie de code. –

Répondre

5

Ce:

for (point_arr=0;point_arr<d;separator_arr++) 

devrait être:

for (point_arr=0;point_arr<d;point_arr++) 

Vous incrémenter le separator_arr, mais vérifie la valeur pointer_arr (ce qui ne change jamais) assez tôt separator_arr est trop grand, et votre adresse est invalide.

2

Vous avez une diaphonie d'index.

for (point_arr=0;point_arr<d;separator_arr++)

devrait être

for (point_arr=0;point_arr<d;point_arr++)