2016-08-27 5 views
1
#include<stdio.h> 
int max_pairwise(int *array,int n) { 
    int result=0; 
    int i,j; 

    for(i=0; i<n; i++) 
     for(j=i+1; j<n; i++) { 
      if(array[i]*array[j]>result) 
       result=array[i]*array[j]; 
     } 
    return result; 
} 

int main(void) { 

    int n; 
    scanf("%d",&n); 

    int array[n]; 
    int i; 
    for(i=0; i<n; i++) 
     scanf("%d",&array[i]); 


    int result=max_pairwise(array,n); 
    printf("%d",result); 

    return 0; 
} 
+1

Из-за границы диапазона будет происходить доступ. Попробуйте использовать отладчик, чтобы найти его. – MikeCAT

+1

Как насчет этого 'for (j = i + 1; j jwpfox

+0

Как правило, всегда полезно проверить, не указана ли указатель, на которую вы ссылаетесь, не 'null' в начале этой функции (' max_pairwise') – ThunderWiring

ответ

3

Вы приращение неправильных переменное во внутреннем цикле:

// here------v 
for(j=i+1;j<n;i++) 

В результате, i продолжает получать приращение неограниченны. Это приводит к считыванию конца массива, вызывающему undefined behavior, причем одним из возможных симптомов является segfault.

Вы хотите:

for(j=i+1;j<n;j++) 
+0

agraahhh ... спасибо большое :) –

+0

@RafiqReefat - Если это решила вашу проблему, примите время, чтобы принять ответ. Это помогает всем нам в SO, поскольку мы можем видеть, что проблема решена. – 4386427

1

В функции max_pairwise(), во втором для цикла вы набрали я ++, вместо j ++

+0

Я не вижу, как ваш ответ добавил какую-то ценность. Это уже было покрыто 6 минут назад by @dbush – 4386427

+0

@ 4386427 Я не вижу, как ваш комментарий добавил какую-то ценность. – nicomp

+0

@nicomp - Это печально – 4386427

Смежные вопросы