2012-03-30 3 views
0

다음 코드에 대한 세그멘테이션 오류가 발생합니다. 제발 조언.strcpy를 사용하는 동안 반복적 인 세그먼테이션 오류가 발생했습니다.

struct columns { 
     char* c_name; 
     char* c_type; 
     char* c_size; 
}; 

int main(int argc, char* argv[]) 
{ 
    int column_num = 3; 
    struct columns col[10]; 
    //columns *col = (columns*) malloc (sizeof(columns) * column_num); 
    strcpy(col[0].c_name, "PSID"); 
    strcpy(col[0].c_type, "INT"); 
    strcpy(col[0].c_size, "4"); 
} 

두 가지 방법으로 열 구조체에 공간을 할당했지만 세그먼트 오류가 계속 발생합니다. 내가 놓친 게 있니?

+0

을 수 있도록 ... – UmNyobe

+1

C 또는 C++에서 가장 묻는 질문입니까? 이것은 중요합니다. 여러분이 ("관용적으로")하는 방식은 두 언어 모두 다릅니다. – Mat

+0

본인의 귀환 신고서가 필요합니다. – saadtaame

답변

2

보십시오이 (strdup 저장을 담당하지만이 완료되면 무료로 기억) :

struct columns { 
    char* c_name; 
    char* c_type; 
    char* c_size; 
}; 

int main(int argc, char* argv[]) 
{ 
    int column_num = 3; 
    struct columns col[10]; 

    col[0].c_name = strdup("PSID"); 
    col[0].c_type = strdup("INT"); 
    col[0].c_size = strdup("4"); 

    return 0; 
} 
5

구조의 포인터가 실제로 초기화되지 않습니다. 그들에게 차원을 주거나 동적으로 메모리를 할당해야합니다.

+0

정확한 답변 ... –

1

메모리를 할당하고 char* 포인터를 초기화하지 마십시오.

물론

strcpy(col[0].c_name=malloc(sizeof "PSID"),"PSID"); 

처럼, 당신은 오류를 검사하고, 그렇지 않으면 의미가 확인해야합니다.

1

columns 구조에는 공간을 할당하지만 저장하려는 문자열에는 할당하지 않습니다. 포인터 (예 : c_name)는 초기화되지 않은 채로 남아있어 임의의 메모리 위치를 가리키고 있으므로 정의되지 않은 동작이 즉시 발생합니다.

2

col[0].c_name은 포인터이지만 어떤 메모리도 가리 키지 않습니다. 그래서 그것이 segfault 것입니다.

아무것도 복사하기 전에 배열 char c_name[256]; 또는 malloc()을 사용하여 메모리를 할당하십시오.

관련 문제