delete[] (char *) foo->bar;
편집의 C 상응하는 무엇입니까
C에 해당할까요?
free(last->key);
free(last->value);
free(last)
delete[] (char *) foo->bar;
편집의 C 상응하는 무엇입니까
C에 해당할까요?
free(last->key);
free(last->value);
free(last)
C에서는 사용자가 new
이 아닙니다. 당신은 방금 malloc()
을가집니다; malloc()
으로 호출하여 얻은 메모리를 해제하려면 free()
이 호출됩니다.
그런데 왜 포인터를 delete
으로 전달하기 전에 (char*)
으로 전송하겠습니까? 그게 거의 틀림 없습니다 : delete
에 전달 된 포인터는 new
으로 생성 된 것과 동일한 유형이어야합니다 (또는 클래스 유형이있는 경우에는 가상 소멸자가있는 기본 클래스).
일부 C++ 코드를 ANSI C로 변환 중입니다. (ptr = this-> _property-> next, last = this-> _properties) 에 대해 ptr!= NULL; last = ptr, ptr = ptr-> next) { delete [] last-> key; 삭제 [] (char *) last-> value; 삭제 마지막; \t \t} 여기서 키 값의 typedef 구조체 { 문자 키 *; void * value; struct keyvalue * next; } keyvalue_rec; 하지만 일반 무료 (last-> key); 무료 (last-> value); 무료 (최후); C? – inquam
@inquam :이 포인터는'malloc()'을 사용하여 할당 된 메모리를 가리 킵니까? 그렇다면'free()'를 사용하여 해제하십시오. –
delete
및 delete[]
에 해당하는 C는 단지 free
입니까?
나는'delete'와'delete []'를 의미한다고 생각합니다. 그렇지 않으면 우리는 다른 C와 C++ 방언을 말할 것입니다 :). – Pieter
@Pieter : 네, 그게 무슨 뜻인가요 :) –
그냥 일반 'ol free()
. C는 배열과 개별 변수를 구별하지 않습니다.
비 배열의 경우와 동일합니다.
free(foo->bar)
등가은 다음과 같습니다
무료 (foo-> 바);
(char *)에 타입 캐스팅 했으므로 'bar'의 실제 유형이 무엇이든간에 캐스팅의 결과로 소멸자가 없었을 것입니다.
malloc을 사용하여 메모리를 할당 한 경우 free를 사용해야합니다. –
@ Sam의 주석 : bar가 실제로 배열 인 경우에 사용했던 calloc에 대해서도 동일합니다. – dkackman
왜 캐스팅을 사용 했습니까? – Clifford