【发布时间】:2014-11-13 15:07:37
【问题描述】:
以下代码在代码块和几个在线编译器中运行良好,但在提交时会出现分段错误。
据我所知,每当我们尝试访问一些未分配的内存时,都会发生段错误,但这是如何以及在哪里发生的?
#include<stdio.h>
int minimum(int a[][300],int n)
{
int flag=0,minval=100000000,mini,i,j,temp;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[j][i]!=0&&flag==0)
{
temp=a[j][i];
flag=1;
}
else if(a[j][i]!=0&&temp!=a[j][i])
{
flag=0;
break;
}
}
if(flag==1&&temp<minval)
{
minval=temp;
mini=i;
flag=0;
}
}
return mini;
}
int main()
{
int i,j,t,n,a[300][300],copy[300],column,subt;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(j!=i)
scanf("%d",&a[i][j]);
else
a[i][j]=0;
}
column=minimum(a,n);
for(i=0;i<n;i++)
if(a[i][column]==0)
break;
for(j=0;j<n;j++)
copy[j]=a[i][j];
subt=a[(i+1)%n][column];
for(i=0;i<n;i++)
{
if(copy[i]==0)
copy[i]+=subt;
else
copy[i]+=1;
}
for(i=0;i<n;i++)
printf("%d ",copy[i]);
printf("\n");
}
return 0;
}
我还尝试在 python 中提交完全相同的代码(完全相同的逻辑)。这同样在所有地方都运行得很好,但只要提交就会给 NZEC。
def minimum(a,n):
flag=0
minval=max(max(a))+1
for i in range(n):
for j in range(n):
if a[j][i]!=0 and flag==0:
temp=a[j][i]
flag=1
elif a[j][i]!=0 and temp!=a[j][i]:
flag=0
break
if flag==1 and temp<minval:
minval=temp
mini=i
flag=0
return mini
for i in range(input()):
n=input()
a=[]
copy=[]
for j in range(n):
temp=(map(int,raw_input().split()))
temp.insert(j,0)
copy=temp[:]
a.append(copy)
del temp
column=minimum(a,n)
print column
for k in range(n):
if a[k][column]==0:
break
copy=a[k][:]
subt=a[(k+1)%n][column]
for k in range(n):
if copy[k]==0:
copy[k]=copy[k]+subt
else:
copy[k]=copy[k]+1
del a
for item in copy:
print item,
print
同一代码如何在两种编程语言中生成两种类型的运行时错误
【问题讨论】:
标签: python c python-2.7 segmentation-fault