malloc으로 할당된 구조에서 C 문자열 사용
malloc을 사용하여 C 구조에 메모리를 할당할 때 데이터 존재 여부를 고려하는 것이 중요합니다. std::string과 같은 중요 생성자가 필요한 멤버.
문제 및 코드 예
다음 코드를 고려하여 다음을 포함하는 구조에 메모리를 할당하려고 시도합니다. std::string 멤버:
#include <iostream> #include <string> #include <cstdlib> struct example { std::string data; }; int main() { example *ex = (example *)malloc(sizeof(*ex)); ex->data = "hello world"; std::cout << ex->data << std::endl; }
이 코드는 분할 오류를 일으킬 가능성이 높습니다. 이 문제는 malloc이 자동으로 초기화되지 않은 원시 메모리를 할당하고 std::string 멤버를 초기화되지 않은 상태로 남겨두기 때문에 발생합니다.
해결책: C 메모리 할당 연산자 사용
C 객체에 메모리를 할당하는 적절한 방법은 new 및 delete와 같은 C 메모리 할당 연산자를 사용하는 것입니다. 이러한 연산자는 할당된 개체에 대한 생성자와 소멸자를 자동으로 호출하여 적절한 초기화 및 정리를 보장합니다.
제공된 코드의 경우 해결책은 malloc을 new로 바꾸는 것입니다.
example *ex = new example;
대안: 새 배치
malloc을 사용하여 메모리를 할당해야 하지만 여전히 C 생성자를 사용하려는 경우 배치 새 연산자를 사용할 수 있습니다.
void *ex_raw = malloc(sizeof(example)); example *ex = new(ex_raw) example;
배치 새 허용 메모리의 특정 위치에 객체를 생성합니다. 그러나 이 접근 방식은 특별한 이유가 없는 한 권장되지 않습니다.
결론
중요한 데이터 멤버가 포함된 C 구조를 다룰 때는 다음을 사용하는 것이 필수적입니다. 정의되지 않은 동작이나 오류를 방지하기 위해 new 및 delete를 사용한 적절한 메모리 할당 기술.
위 내용은 문자열 멤버를 사용하여 C 구조에 메모리를 올바르게 할당하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!