귀하의 코드가 닭과 달걀 문제를 설명 : 내가 그 코드를 실행하면
#include <stdio.h>
#include <stdlib.h>
int len(char *string);
int main(void){
char *string;
string=(char *)malloc(len(string+1));
puts("enter string:");
fgets(string,sizeof(string),stdin);
printf("length=%d\n",len(string));
return 0;
}
int len(char *string){
int len;
while(*string!='\0'){
string++;
len++;
}
return len-1;
}
이있다. 길이를 계산하려면 길이를 계산하는 데 필요한 공간을 할당하기 위해 할당 된 공간 &이있는 포인터가 필요합니다.
의 malloc(), 당신이 그것을 의미, 아직 초기화 또는 메모리를 할당되지 않은 포인터 인 string
을 전달하는에서
string=(char *)malloc(len(string+1));
에서 일부 쓰레기 값을 포함합니다. 그리고 그 길이를 len()
으로 계산하면, 여기에 포함 된 쓰레기 주소를 참조 해제합니다. 놀랍게도 여기에는 segfault가 없습니다.
그리고 당신은 당신의 len()
기능에 len
변수를 초기화하지 않은, 그냥 len
에 포함 된 반환하는 쓰레기 값을 추가합니다.
나는 코드를 실행하고 있기 때문에 위에서 언급 한 문제로 나에게
세그먼트 오류했다.
'len'을 초기화하지 않기 때문에. (온화한) 최적화와 * 모든 * 적절한 경고 플래그 (GCC에서는'-O -Wall', 아마도 조금 더)로 컴파일하십시오. 위와 같은 실수에 대해 알려야합니다. – vonbrand