몇 가지 포인트 :
C 무효 포인터가 암시 적으로 다른 개체 포인터 형식으로 변환 할 수 있습니다. C++은 그렇지 않습니다. 당신이 범위 malloc()
에 대한 선언이없는 다른 인 stdlib.h 포함하는 것을 잊지 또는 경우에 유용한 진단을 supress합니다 C에서 malloc()
의 결과를 주조
. C가 이전 선언없이 함수 호출을 발견하면 함수가 int
을 리턴한다고 가정합니다. malloc()
에 대한 선언이없고 캐스트를 중단하면 호환되지 않는 유형 (포인터에 대한 int)을 할당하려고한다는 진단을 받게됩니다. 결과를 캐스팅하면 진단 도구가 불충분 해지고 잠재적으로 런타임 문제가 발생합니다. 포인터 값을 int로 변환하고 다시 포인터로 변환하면 유용한 결과를 얻을 수 있다는 보장이 없기 때문입니다.
C++을 작성하는 경우 malloc()
및 free()
대신 new
및 delete
을 사용해야합니다.그래, 네, 사람들이 코드를 C와 C++ 모두로 컴파일해야하는 모든 이유를 들었지만 언어에 적합한 메모리 관리 도구를 사용하면 얻을 수있는 이점이 IMO 두 버전을 유지 관리하는 비용보다 큽니다.
참고 : void *
유형이 C89 표준에 추가되었습니다. 이전 버전의 C는 malloc()
return char *
이었으므로 다른 포인터 유형에 결과를 할당하는 경우 해당 버전에서 은이 필요했습니다. 거의 모든 사람들이 최소한 C89 표준을 지원하기 때문에 이전 구현 중 하나를 실행하는 확률은 매우 낮습니다.
C++의 유형이 더 중요하므로 캐스트를 통해 정확한 유형을 지정해야합니다. – Abhay
이것은 귀하의 질문과 직접적인 관련이 없지만 sizeof (int *)가 아닌'sizeof (int)'를 원한다고 생각합니다. 즉,'sizeof * int_ptr'을 사용하는 것이 더 낫습니다. 이것은 int_ptr이 가리키는 어떤 타입의 메모리라도 할당 할 수 있도록 보장합니다. – bcat
왜 C++에서 malloc을 사용하겠습니까? – SoapBox