구조체를 만들고 새로운 구조체 자체를 반환하는 함수가 있습니다. 구조체에는 숫자 배열과 숫자가 몇 개 있는지 나타내는 정수가 들어 있습니다 (이 배열과 같습니다). 그래서 임시 구조체를 만든 후 반환하는 makeStruct가 있습니다. main에서이 함수를 호출하여 myNumbers 구조체에 할당합니다. 이것은 함수에서 구조체의 인스턴스를 만들고 myNumbers에 복사 한 다음 삭제 한 것입니다. 내 가정이 맞습니까?C : 더 이상 포인터가 없을 때 구조체에 메모리를 확보하는 방법은 무엇입니까?
올바르게 컴파일 된 것처럼 보이지만 내 구조를 가리키는 포인터가 없으므로 할당 된 메모리를 확보 할 수있는 방법이 없습니다. 어떻게 메모리를 비울 수 있습니까?
#include <stdlib.h>
#include <stdio.h>
typedef struct{
int* numbers; /*array of numbers*/
int crowd; /*crowd of numbers*/
} magicNums;
magicNums makeStruct(int crowd){
magicNums tempStruct, *struct_ptr=&tempStruct; /*my temp struct and its pointer*/
struct_ptr=(magicNums*)malloc(sizeof(magicNums)); /*allocating memory for struct*/
tempStruct.numbers=(int*)malloc(sizeof(int)*crowd); /*allocating memory for struct's numbers*/
return tempStruct;
}
int main() {
magicNums myNumbers;
myNumbers=makeStruct(10);
/*magicNums *myNumbers_ptr=&myNumbers; This won't work */
/*free(myNumbers_ptr); This won't work */
/*free(&myNumbers); This won't work */
return 0;
}
달콤하고 거룩한 ...이 코드에는 _ 많은 사항이 있습니다. – Chowlett
그 의견이 내 마음을 웃게했다. 내 코드가 얼마나 무서운지를 자랑스럽게 생각합니다! – Pithikos