2010-02-10 5 views
1
이 문제에 대한 내 코드의
#include<stdio.h> 
#include<iostream> 
#include<string> 
#include<string.h> 
using namespace std; 
char arr[200],res[200]; 
char table[150][200]; 

string multiply(char n[],int m) 
{ 
    int N=strlen(n),M,temp=0,x=0; 
    for(int i=0;i<N;i++) 
     arr[i]=n[N-1-i]; 
    for(int i=0;i<N;i++) 
    { 
     x=m*(arr[i]-'0')+temp; 
     x=m*(arr[i]-'0')+temp; 
     arr[i]=(x%10)+'0'; 
     temp=x/10; 
    } 
    while(temp>0) 
    { 
     arr[N]=(temp%10)+'0'; 
     temp/=10; 
     N++; 
    } 
    M=strlen(arr); 
    for(int i=0;i<M;i++) 
     res[i]=arr[M-1-i]; 
} 
void make_table() 
{ 
    table[0][0]='1'; 
    for(int i=1;i<101;i++) 
    { 
     multiply(table[i-1],i); 
     int u=strlen(res); 
     for(int j=0;j<u;j++) 
     { 
      table[i][j]=res[j]; 
     } 
    } 
} 
int main() 
{ 
    int tc,n; 
    scanf(" %d",&tc); 
    make_table(); 
    while(tc--) 
    { 
     scanf(" %d",&n); 
     printf("%s\n",&table[n]); 
    } 
    return 0; 
} 

: http://www.spoj.pl/problems/FCTRL2/ 그것은 나를 위해 정답을 생성하지만 난 그것을 제출할 때, 그것은 나에게 런타임 오류 (분할 오류)를 알려줍니다. 누구나 세그먼트 오류가 무엇인지 설명 할 수 있습니까? 내가 spoj 웹 사이트에서 읽었고 그것을 피하는 방법과 코드를 업그레이드하는 방법을 이해하지 못했습니까?누군가 내 코드가 SPOJ에서 세분화를 생성하는 이유를 말해 줄 수 있습니까? 및 분할 오류 오류 무엇 (FCTRL2)

답변

2

함수의 반환 형식을 string에서 void으로 바꾸면 segfault가 사라집니다.

액세스 권한이없는 메모리를 읽거나 쓰려고하면 조각화 오류가 발생합니다. 예를 들어 읽기 전용 메모리에 쓰기를 시도하거나 주소 0x00000000에서 읽을 수 있습니다. segfaults를 달성하는 일반적인 방법은 초기화되지 않은 포인터를 사용하는 것입니다.

디버거는 세그먼트 오류를 ​​발견하는 데 도움이되는 경우가 종종 있습니다.

+0

글쎄 내 고마워 ... 고마워. D 그게 – magiix

+0

일 했어. 그 밖의 무엇이 세그 폴트를 일으킬 수 있는지 알고 있다면 나에게 계몽 해 줄 수 있니? – magiix

관련 문제