2012-11-14 6 views
0

파일을 읽고 알파 정렬 된 배열로 파일에 쓰는 것이 좋습니다. 그러나 gdb를 사용하여 세그멘테이션 오류가 계속 발생하며이를 통해 내 디스플레이 및 정렬 기능이 세그멘테이션 오류가 발생 함을 나타냅니다.계속 malloc을 사용하여 이름을 정렬하는 데 segault 오류가 발생합니다.

편집 : 메모리를 할당하는 매크로를 사용하여 수정했습니다. 임무이기 때문에이를 위해 공개하고 싶지 않습니다. 모든 사람의 도움에 감사드립니다.

+0

댓글을 달고 좀 더 관대해질 수 있습니까? 그리고 네가 그곳에있을 때 들여 쓰기? 감사. –

+0

심볼로 컴파일 된 바이너리의 코어 덤프를 제공 할 수 있습니까? – cowboydan

+0

gdb에서 실행중인 bt의 결과를 질문에 추가하십시오. –

답변

1

이 작업을 수행해야합니까? 아야.

나는 segfault도 있지만 read_names()에 있습니다. 이 말에 잘못) (뭔가를 확보하려고하지만, 내가 & 인쇄를 정렬 할 수 있었다 그 후

void read_names (FILE *fp, char **f, char **l, char *m, int num)//read it 
    { 
     int i=0; 
     char temp[80]; 

     for (i=0; i<num; i++) 
     { 
      fscanf(fp, "%s %s %s", f[i], l[i], m); 
     } 
    } 

: 나는 단순한는 scanf()와 모든 strtok를() 물건을 교체하여 문제를 해결할 수 있었다 .

일반적으로 strtok()은 안전하지 않으며 단지 아프지 만 문자열을 파괴합니다.

더 의미있는 이름을 사용하면 작업하기가 더 쉽습니다. 나는 결국 "l []"이 성을 포함하는 문자열 이었지만 "sLastName []"라인을 따라 무언가를 엄청나게 빨라지게했을 것입니다.

편집 :

내가 수집하여 입력 텍스트 파일은 다음과 같이 보았다 :

2 bill smith a doug adams r 

EDIT2 :

OK, 다른 세그먼트 폴트를 발견했다. "num"은 무엇입니까? 그것은 파일의 이름 수와 각 이름의 종류의 종류로 해석되는 것 같습니다. 마지막으로 나를 위해 - - 세그먼트 폴트가 멀리 갔다

// allocate "num" first name elements -> implied "num" is # of names 
f=(char**)malloc (num*sizeof(char*)); 

// allocate space for each name... but uses the value of "num" for each name 
for (i=0; i<num;i++) 
    f[i]=(char*)malloc (num*sizeof(char)); // "num" bytes per name? 

나는 100 개 당 바이트 대신 "NUM"값, 두 번째 할당을 시작했을 때.

전체 프로그램을 입력 한 다음 테스트를 시작 했습니까? 디버거 및/또는 printf()를 사용하여 각 단계에서 원하는 작업을 수행하는지 확인함으로써 점진적으로 기능을 추가하는 작은 단계에서 작업하는 것이 훨씬 쉽습니다.

+0

나는 그것을 고쳤다. num을 사용하는 대신 루프 내부에 매크로를 사용한다고 가정합니다. 의견을 보내 주신 모든 분들께 감사드립니다. 감사합니다. – user1820314

관련 문제