2017-10-16 3 views
0

아래 프로그램을 실행할 때이 문제가 있습니다. 모든 것이 잘 컴파일되지만, 실행하고 무언가를 입력하면 Segmentation 오류 메시지가 나타납니다. 그 전체 코드가 아닌 입력 파일에서 문자열의 배열로 일부 문자열 (주소)를 작성한 다음 배열에서 검색된 문자열 (인수로 입력)에 대한 가능한 일치를 찾습니다. 내가 잘못된 명확하게 볼 수 있습니다"분할 오류 (코어 덤프)"오류로 무엇을합니까? (다른 곳에서는 답변을 찾을 수 없습니다)

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    char *entry1 = argv[1], *adress[100], *possibleAdress[100], c; 
    int i,j,k,possible = 0; 

    while(c = getchar()!=EOF)   //write addresses to array 
    { 
    while(c = getchar()!=13) 
     { 
     adress[i][j] = c; 
     j++; 
     } 
     i++; 
    } 

    i = 0; 

    while(adress[i]!=0)  //find adresses matching with search enrty 
    { 
    j = 0; 
    while(adress[i][j]!=0) 
    { 
     while(entry1[j]==adress[i][j]) 
     j++; 
     if(j==strlen(entry1))  //check if the whole search entry is matching 
     { 
     possibleAdress[k] = adress[i]; 
     k++; 
     } 
     i++; 
    } 
    } 
    return 0; 
} 
+0

의 I, J 및 K는 모두 초기화하지 않고 사용하는 프로그램은 정의되지 않은 동작을 호출한다. – George

+1

또한'adress'와'possibleAdress'에 메모리를 할당하지 않았으므로 임의의 주소에 값을 쓰고 있습니다. segfault는 정확히 올바른 응답입니다. –

+0

그냥 포인터가되지 않도록 배열을 변경하십시오. 그렇지 않으면 @LeeDanielCrocker가 malloc char entry1 = argv [1], adress [100], possibleAdress [100], c;를 사용하여 명시 적으로 배열의 메모리를 제안하고 실제로 할당해야합니다. – victor

답변

2

한 가지는 당신이 동안 루프에 사용하기 전에 주에있는 I의 값과 J를 초기화하지 않은 것입니다.

0

"분할 오류 (코어 덤프)"오류로 무엇을합니까?

세그먼테이션 폴트 (segfault)이 무엇인지에 이전 질문 : What is a segmentation fault?

은 당신이 그들과 함께 할 것은 디버거, 예를 들어, GDB을 탈출이다. 그러면 코드를 한 줄씩 건너 뛸 수 있고 지시에 따라 지시하고 문제의 원인을 이해할 수 있습니다.

기타 대답은 정확합니다. i & j는 초기화되지 않았습니다. 디버깅을 통해 이러한 변수와 메모리 액세스를 검사 할 수 있습니다.

0

많은 수정이 필요합니다. 포인터를 증가 시키려면 적절한 양의 메모리를 할당해야합니다. 당신의 while 루프는 메모리 할당없이 포인터 값을 증가 시키려고하는 곳에서 완전히 잘못되었으며, 이것이 sig fault 에러를주는 이유입니다.

제 변경이 라인 : int i=0,j=0,k=0,possible = 0;

지금 while 루프

while(c = getchar()!=EOF)   //write addresses to array 
{ 
    j = 0; 
    char *p = malloc(30);// size should be change as per your requirement 
    address[i] = p; //store the address of p here 
    while(c = getchar()!=13) 
    { 
    *((adress[i])+j) = c; //it is just like *p++ = c 
    j++; 
    } 
    i++; 
}