내가 array
에 malloc()
를 사용하여 할당 된 pointers
을 저장할 free()를 할 수 없습니다 이후 그 다음 free
모든. 그러나 프로그램이 불평하지 않더라도 작동하지 않습니다. cleanMemManager()
아래 실제로 free
main()
내부에서 테스트했을 때 메모리는 이 아니며 이 아니며 ???
을 인쇄합니다.C - 배열에서의 malloc()와 저장 포인터, 그들이 나중에
코드 :이 사용하는 구문을 이해하지 못하는
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void **ptrList = NULL;
void tfree(void** ptr)
{
free(*ptr);
*ptr = NULL;
}
void* talloc(int size)
{
void* ptr = malloc(size);
ptrList[0] = ptr; ///No clue if this actually does what I think it does
return ptrList[0];
}
void initMemManager()
{
ptrList = (void**)malloc(sizeof(void**) * 3);
memset(ptrList, 0, sizeof(void**) * 3);
}
void cleanMemManager()
{
tfree(&ptrList[0]); //Doesn't free the right pointer it seems
}
int main()
{
initMemManager();
char* ptr = (char*)talloc(3);
cleanMemManager();
if (ptr != NULL) //This will trigger and I'm not expecting it to
printf("???");
getchar();
return 0;
}
는 포인터가 실제로 전혀 감동되지 않습니다? 어떤 오류도 발생시키지 않으므로 그때부터 무엇이 자유 롭습니까?
:'void * ptr = malloc (size);'1) 작업이 성공적으로 수행되었는지 확인하기 위해 반환 값을 항상 확인 (! = NULL)합니다. 2)'malloc()'함수는'int_type'가 아닌'size_t' 타입의 매개 변수를 기대합니다. (이 암시 적 변환은'size_t'가 부호가 없으며'int'가 서명되었으므로 실패 할 수 있습니다.) – user3629249