문제

구조물이 주어지면, 예를 들어

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 ()에 할당 된 메모리에서만 호출 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top