2012-04-26 3 views
11

아래 코드에서 세분화 오류가 발생하는 이유는 무엇입니까?strcpy로 세분화 오류

int main(void) 
{ 
     char str[100]="My name is Vutukuri"; 
     char *str_old,*str_new; 

     str_old=str; 
     strcpy(str_new,str_old); 

     puts(str_new); 

     return 0; 
} 

답변

21

*str_new을 초기화하지 않았으므로 임의의 주소로 str_old을 복사하는 것입니다. 당신은이 작업을 수행해야합니다 malloc이 함수를 사용할 때하지 않았다면

char str_new[100]; 

또는

char * str = (char *) malloc(100); 

당신은 #include <stdlib.h>해야합니다.

7

str_new는 초기화되지 않은 포인터, 그래서 당신은 (준) 임의의 주소로 쓰기 위해 노력하고 있습니다.

2

str_new은 유효한 메모리를 가리 키지 않으므로 초기화되지 않고 가비지가 포함되어 있으며 세그먼트 화 오류가 발생하는 경우에도 매핑되지 않은 메모리를 가리킬 가능성이 높습니다. str_newstrcpy()을 호출하기 전에 해당 문자열 (예 : \0 바이트 포함)을 보유 할 수있을만큼 큰 유효한 블록으로 지정해야합니다.