호출한 함수가 종료되면 str2 배열이 사라지고 str2[3]에 관한 참조를 리턴하면서 값은 정상적으로 받지만, 해당 메모리는 해제됐기에 덮어씌워질 위험이 있어 경고하는 게 정상 아님??
매개변수로 string 클래스를 받으면 경고 잘 띄우는데 char 배열은 안 띄우네..
내가 잘못 안건가??
호출한 함수가 종료되면 str2 배열이 사라지고 str2[3]에 관한 참조를 리턴하면서 값은 정상적으로 받지만, 해당 메모리는 해제됐기에 덮어씌워질 위험이 있어 경고하는 게 정상 아님??
매개변수로 string 클래스를 받으면 경고 잘 띄우는데 char 배열은 안 띄우네..
내가 잘못 안건가??
함수 매개변수의 배열은 포인터임
void f(int* argc) == void f(int argc[])
!
맞다 전역하면서 잊음; 감사합니다
str이랑 str2는 둘 다 포인터야. 함수 인자로 포인터 값이 전달돠고 함수가 리턴되면서 str2의 포인터 값이 메모리 해제되었지만 실제 문자열이 저장된 메모리와는 관계 없음.
감사합니다 선생님 좋은 하루 되십쇼
str는 포인터 아니야
str이름 자체는 str[0]의 주소를 가리켜서 그런 맥락으로 말씀하신 것 아니예요?
함수의 매개변수로 받는 str2[]는 내부적으로 봤을 때 char* str2여서 완벽히 포인터인거고요.
나도 포인터인줄 알고 찾아봤는데 대부분의 경우 배열이 포인터로 형변환이 일어나서 포인터랑 같다고 생각해도 무관하긴 한데 엄밀히 말하면 같다고는 할수 없다네 내부동작 자체가 아예 컴파일러가 다르게 처리한다고 하기도 하고 배열자체가 들고있는 정보, 배열의 전체크기라던가가 포인터보다 더 많다고 함 그래서 배열->포인터 형변환하면 정보를 잃으면서 형변환 한다고 함
오,,, 정말 귀한 정보 감사합니다 선생님.
역시 깃갤 행님덜이 최고십니다. 깃갤 홧팅
근로저 컴파일러였으면 경고띄워주는데