아래 코드에서 세분화 오류가 발생하는 이유는 무엇입니까?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;
}
아래 코드에서 세분화 오류가 발생하는 이유는 무엇입니까?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;
}
*str_new
을 초기화하지 않았으므로 임의의 주소로 str_old
을 복사하는 것입니다. 당신은이 작업을 수행해야합니다 malloc이 함수를 사용할 때하지 않았다면
char str_new[100];
또는
char * str = (char *) malloc(100);
당신은
#include <stdlib.h>
해야합니다.
str_new
는 초기화되지 않은 포인터, 그래서 당신은 (준) 임의의 주소로 쓰기 위해 노력하고 있습니다.
str_new
은 유효한 메모리를 가리 키지 않으므로 초기화되지 않고 가비지가 포함되어 있으며 세그먼트 화 오류가 발생하는 경우에도 매핑되지 않은 메모리를 가리킬 가능성이 높습니다. str_new
을 strcpy()
을 호출하기 전에 해당 문자열 (예 : \0
바이트 포함)을 보유 할 수있을만큼 큰 유효한 블록으로 지정해야합니다.