문제
구조물이 주어지면, 예를 들어
typedef struct
{
int value;
} TestStruct;
다음 코드 (iPhone에서 실행되는 Objective-C 클래스의 맥락에서) 왜 "정렬되지 않은 포인터가 해제되지 않는"예외를 던지는가?
TestStruct ts = {33};
free(&ts);
NB My Uber 목표는 많은 벡터 장의 기능이있는 C 라이브러리를 사용하는 것이므로 C와 Objective-C를 혼합하는 몇 가지 실행 가능한 방법을 찾아야합니다.
해결책
스택이나 정적 변수를 풀려고하는 것처럼 보입니다. 무료가 될 수 있으려면 malloc () 'D가 있어야합니다 () d.
대신 시도해보십시오.
TestStruct *ts = malloc(sizeof(TestStruct));
ts->value = 33;
free(ts);
객체 지향 언어에 익숙한 사람들의 경우 생성자를 만드는 데 도움이 될 수 있습니다.
TestStruct *newTestStruct(int value)
{
TestStruct *ret = malloc(sizeof(TestStruct));
ret->value = value;
return ret;
}
이를 통해 구조물을 할당하고 값을 한 단계로 설정할 수 있습니다. 이 값은 더 이상 유용하지 않으면 해제되어야한다는 것을 기억하십시오.
TestStruct *x = newTestStruct(3);
free(x);
다른 팁
스택에 할당 된 것을 자유롭게하려고하기 때문입니다. free ()는 malloc ()에 할당 된 메모리에서만 호출 할 수 있습니다.
제휴하지 않습니다 StackOverflow