#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Point2D {
int x;
int y;
};
int main()
{
struct Point2D p;
struct Point2D* ptr = malloc(sizeof(struct Point2D));
memset(&p, 0, sizeof(struct Point2D));
memset(ptr, 0, sizeof(struct Point2D));
printf("%d %d %d %d\n", p.x, p.y, ptr->x, ptr->y);
free(ptr);
return 0;
}
이대로 실행시
오류(활성) E0144 "void *" 형식의 값을 사용하여 "Point2D *" 형식의 엔터티를 초기화할 수 없습니다.\
라는 오류가 계속 떠서 일단은
struct Point2D* ptr = (Point2D*) malloc(sizeof(struct Point2D));
이렇게 형식 지정자를 붙여서 사용하고 있습니다. 이게 비주얼 스튜디오만의 문제인지 아니면 다른 문제인지 궁금합니다.
상단 고정에 자주 묻는 질문에도 정리되어 있습니다.
UNIT 3에서 프로젝트를 생성하고 소스 코드를 추가할 때도 파일의 확장자를 .c로 하라고 설명하고 있습니다.
확장자 .cpp로 되어 있으면 C++ 컴파일러이고, C++는 메모리 할당이 C 언어와 다릅니다. 확장자를 .cpp로 쓸 때 나타나는 전형적인 오류입니다.
C 언어에서는 합법이고, C++에서는 불법(illegal)으로 판단하기 때문입니다.
그걸 오류를 해결한답시고 너무나 많은 C 언어 책들이 (자료형) 형태로 형변환하는 예시를 제시하고 있습니다. C 언어 표준을 벗어날 뿐만 아니라 실무에서도 C 언어를 잘못 배웠구나, 시중의 엉터리 C 언어 책으로 배웠구나, C 언어 잘못 배운 거 바로 잡고 고치는 게 더 힘들다는 불만의 원인이 되고 있습니다.
C 언어 공부법과 책추천(C표준)
https://sunyzero.tistory.com/225
글을 참고해보세요.