Ich versuche, ein Problem im Hacker-Rang zu lösen. Wenn ich den folgenden Code auf meinem lokalen System ausführe, wird kein Fehler angezeigt. Aber wenn ich es einreiche, zeigt es eine segmentation fault
.Segmentation Fehler tritt in C-Programm
Er akzeptiert den ersten Testfall, aber die übrigen Testfälle führen zu einem 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;
}
'arr = (int **) malloc (sizeof (int) * n);' - >> 'arr = (int **) malloc (sizeof (int *) * n);' - >> 'arr = (int **) malloc (n * sizeof * arr);' - >> 'arr = malloc (n * sizeof * arr);' – wildplasser
Fragen Sie sich, was Sie mit '(int **) malloc erreichen möchten (sizeof (int) * n); '? – sjsam
Ich möchte Speicher für n Doppelzeiger –