이노고 몬토야의 말을 바꾸기 위해 나는이 코드가 당신이 생각하는 것을 의미한다고 생각하지 않습니다.
malloc(sizeof(char))
이 일정한 양의 메모리를 할당한다. 얼마나 많은 메모리가 할당되는지는 malloc
의 매개 변수에 의해 결정됩니다. 이 경우 정확히 정의하면 1 바이트 인 정확히 sizeof(char)
을 전달합니다. 따라서 1 바이트의 메모리를 할당합니다.
malloc
(자세한 내용은 나중에 설명)을 사용하려는 경우 저장하려는 문자열의 길이를 알아 내고 NULL 종결 자에 대해 한 바이트 더 추가 한 다음 malloc
그 정도를 계산해야합니다. 13 자 문자열 Hello, world.
의 경우, 해당 호출은 다음과 같습니다
malloc(14)
다음 :
char y = (char)malloc(sizeof(char));
malloc
가 당신을 위해 할당 된 메모리에 대한 포인터를 반환합니다. 이 경우 y
은 포인터가 아니며 단지 char
입니다. 둘은 동일하지 않습니다. 컴파일하고 이 이라는 C 스타일의 캐스트로 알려진 bludgeoning 도구를 사용하기 때문에이 작동합니다. 이것은 컴파일러에게 "나는 총을 내 발로 가리키고 있다는 것을 알고있다. 내가하는 말을하고 불평하지 마라." 그것은 정직하게 행동한다. 하지만 여러 가지 이유로 잘못된 일을하고있어 :
malloc
는 포인터를 반환하지만 당신은 당신은 단지 1 바이트를 할당 char
- 에 캐스팅하기 위해 노력하고 있지만, 당신은 당신이 할당 된 것으로 전체 문자열의 가치가있는 메모리
y
은 단지 char
이지만 전체 문자열 인 것처럼 취급합니다. static const char* HELLO = "Hello, malloc.";
char* x = malloc(strlen(HELLO)+1);
strcpy(x, HELLO);
char* y = malloc(strlen(x)+1);
strcpy(y, x);
을, 당신은 C++로 모든 malloc
를 사용해서는 안 :
그래서 다시 malloc
를 사용하여 주장하는 경우, 당신은 같은 것을 할 필요가있다. 대신 std::string
를 사용한다 :
string
의가 그들의 자신의 메모리를 관리 : std::string x = "Hello, string.";
std::string y = x;
때문 낫다. 코드에서했던 것처럼 메모리가 누출되지 않습니다.
- 은 유형 안전합니다.
malloc
에서 char
으로 반송 할 때 유형 안전을 위반했습니다. 당신은 그것을 할 수 있지만, 하지 않습니다 char
. 그 나쁜.은 큰 노력을 기울이지 않고 이런 식으로 자신을 쏠 수 없습니다.
- 코드가 적습니다. 가장 좋은 코드는 작성하지 않은 코드입니다.
이 숙제가 있습니까? – trojanfoe
이것이 C++ 인 경우 malloc()을 시험하기 전에 std :: string을 오래 배워야합니다. –
이것이 정말로 C++이라면, 아마도'malloc'을 사용해서는 안되며 아마도'std :: string' 타입을 사용해야 할 것입니다. –