이 코드를 시험해 보았습니다! 어떻게 작동하는지 이해할 수 없습니다.함수에 char * 전달하는 방법?
int main()
{
char *s1;
s1=malloc(sizeof(char)*20);
strcpy(s1,"main");
printf("%s\n",s1);
func(s1);
printf("After call %s\n",s1);
return 0;
}
void func(char *s2)
{
//free(s2);<--------------(this is what I'm talking about)
s2=malloc(sizeof(char)*25);
strcpy(s2,"func");
printf("fun---%s\n",s2);
}
출력 :
main
fun---func
After call main
내가 어떻게 모든 일을 알고 싶어
main
fun---func
After call main
하지만 주석 라인 출력이
Outout입니다 추가) (FUNC의 경우
공장. 즉,s1
은
char*
입니다. 할당 후에는 메모리 덩어리를 가리 킵니다. C에서 모든 것은 가치에 의해 전달됩니다. 따라서 전달할 때 청크 메모리의 주소를 보유하는 (스택)
main
의 로컬 범위에 다른 변수가 생성됩니다 (즉,
s1
에이 값이 포함되어 있음).
- 이제 우리는 다음
main()
에s1
에 변화의 반사를 얻기의 기회가없는 할당합니다.s1
은 절대로 변경되지 않습니다. - 하지만 무료라면
func()
을 호출 한 후printf()
의 메인에 가비지 값을 가져와야합니다.
올바른 생각입니까? 그렇지 않다면 개념을 깨끗이하십시오. Windows에서 나는 당신에게 말한 것처럼 결과를 주었다. 그러나 리눅스에서 그것은 어떻게해서든지 그 변화를 반영했다.
무엇이 누락 되었습니까?
감사! 이제 func에 line()을 추가하지 않고 메모리 누수가 있으면 할당합니다. 그러나 함수에 char * 만 전달하고 호출 함수의 변경을 반영하는 메모리를 할당하여 할당 할 수있는 방법은 없습니다 isn 그것? – coderredoc
@amalsom 함수에서 변경하고자하는 다른 값과 마찬가지로 포인터를 변경하려는 포인터를 전달해야합니다. –
@ amalsom. 메모리를 할당하고 다시 전달하려면 _double_ indirection을 사용하고 대답을 업데이트합니다. – paxdiablo