我试图解决黑客级别的问题。当我在本地系统上运行以下代码时,它没有显示任何错误。但是当我提交它时,它会显示segmentation fault
。
它接受了第一个测试用例,但剩下的测试用例确实产生了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 :(得分:0)
正如sjsam指出的那样,这句话是错误的:
arr=(int **) malloc(sizeof(int )*n);
您的程序适用于sizeof(int) == sizeof(int*)
(即32位系统)的系统,但在64位系统上可能会失败(sizeof(int) == 4
和sizeof(int*) == 8
。
我想通过q
动态创建维度为n的二维数组
我们理解这一点,你 在这里创建了这样一个数组:
arr[0] = (int *) malloc(sizeof(int )*q*n);
但是你在问题陈述中创造了一些 else ;即n
指针的数组,而不是n
整数数组。