2016-06-25 3 views
-5

Я пытаюсь решить проблему в ранжировании хакеров. Когда я запускаю следующий код в своей локальной системе, он не показывает никаких ошибок. Но когда я его отправлю, он показывает segmentation fault.Ошибка сегментации в программе C

Он принял первый тестовый пример, но остальные тестовые примеры приводят к segmentation fault.

#include<stdio.h> 
#include<stdlib.h> 

int main(void) 
{ 
    int n,q,i,j; 
    scanf("%d %d",&n,&q); 

    int k,l,m,seq,lastAns=0; 
    int **arr; 
    arr=(int **) malloc(sizeof(int)*n); 

    if(!arr) return 0; 

    arr[0] = (int *) malloc(sizeof(int)*q*n); 

    for(i = 0; i < n; i++) 
     arr[i] = *arr + i*q ; 

    if(!*arr) return 0; 

    for(i = 0; i < q ; i++) 
    { 
     scanf("%d%d%d",&k,&l,&m); 
     switch (k) 
     { 
      case 1: seq= (l^lastAns)%n; 
       for(j = 0 ; j < q; j++) 
       { 
        if(!arr[seq][j]) 
        { 
         arr[seq][j]=m; 
         break; 
        } 
       } 
       break; 
      case 2: 
       seq= (l^lastAns)%n; 
       lastAns = arr[seq][m % n]; 
       printf("%d\n", lastAns); 
       break; 
     } 
    } 
    free(arr[0]); 
    free(arr);  
    return 0; 
} 
+0

'arr = (int **) malloc (sizeof (int) * n);' - >> 'arr = (int **) malloc (sizeof (int *) * n);' - >> 'arr = (int **) malloc (n * sizeof * arr);' - >> 'arr = malloc (n * sizeof * arr);' – wildplasser

+0

Задайте себе, что вы хотите выполнить с помощью '(int **) malloc (sizeof (int) * n); '? – sjsam

+0

Я хочу выделить память для n двойных указателей –

ответ

0

Как sjsam отметил, что это утверждение неверно:

arr=(int **) malloc(sizeof(int)*n); 

Ваша программа работает на системах, где sizeof(int) == sizeof(int*) (т.е. 32-битные системы), но, скорее всего, не в состоянии на 64-битные (на которые sizeof(int) == 4 и sizeof(int*) == 8.

я хочу создать 2d массив динамически размерности п на д

Мы понимаем, что и у вас есть создали такой массив здесь:

arr[0] = (int *) malloc(sizeof(int)*q*n); 

Но вы создаете что-то еще на постановку задачи; а именно массив из nуказатели, а не массив из n целых чисел.

+0

спасибо за помощь. Я хочу создать 2d-массив динамически размерности n на q. –

+0

@ManoharManu Я обновил ответ. –

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