munmap_properties(): 잘못된 포인터
나는 내 프로그램에서 오류를 발견했고 간단한 것을 쓰기로 결정했어. 무슨 일이 일어나고 있는지 이해하는 데 도움이 될 거야.여기 있다:
#include <stdio.h>
#include <stdlib.h>
char * first()
{
char * word = malloc(sizeof(char) * 10);
word[0] = 'a';
word[1] = 'b';
word[2] = '\0';
return word;
}
char * second ()
{
char * word = malloc(sizeof(char) * 10);
word = "ab";
return word;
}
int main ()
{
char * out = first();
printf("%s", out);
free(out);
out = second();
printf("%s", out);
free(out);
return 0;
}
그first()
기능이 제대로 작동하고 있지만second()
(soing the)free(out)
) genarates 오류:
./a.out' 오류: munmap_chunk(): 잘못된 포인터: 0x0000000000400714 *** AbabAbored(핵심 덤프)
첫 번째 기능이 왜 맞는지 이해가 안 되는데, 두 번째 기능이 맞지 않아.왜 그런지 누가 설명해줄래?
함수에second()
, 할당word = "ab";
에 새 포인터를 할당하다word
, 을 통해 얻은 포인터를 덮어쓰기malloc()
. 전화할 때free()
나중에 포인터에서, 당신이 포인터에게 포인터 하나를 건네주었기 때문에 프로그램이 중단된다.free()
을 통해서 얻어지지 않은.malloc()
.
문자열 리터럴을 할당하는 것은 당신이 생각했던 것처럼 내용을 복사하는 효과가 없다.문자열 리터럴의 내용을 복사하려면strcpy()
:
strcpy(word, "ab");
기능 중char * second
char * word = malloc(sizeof(char) * 10);
word = "ab";
두 번째 진술word = "ab";
변화들word
할당된 메모리를 가리킴문자열을 복사하지 않는 경우"ab"
에 의해 할당된 더미 영역까지.malloc
.
And toofree
할당되지 않은 기억malloc
또는 유사한 기능이 프로그램을 손상시킨다.
잘못된 포인터(calloc, malloc 또는 realloc에 의해 할당되지 않은 메모리 블록에 대한 포인터)를 해제하려고 하면 후속 할당 요청에 영향을 미치고 오류가 발생할 수 있다.
당신은 여기서 사용해야 한다.strcpy
남들이 건의한 바와 같이
참조URL: https://stackoverflow.com/questions/32118545/munmap-chunk-invalid-pointer
'programing' 카테고리의 다른 글
Android 앱에서 인터넷 연결 확인을 위한 브로드캐스트 수신기 (0) | 2022.05.17 |
---|---|
자바 시스템 속성 및 환경 변수다. (0) | 2022.05.17 |
SIGPINPY를 방지하는 방법(또는 올바르게 처리) (0) | 2022.05.16 |
vue-cli에 대한 두 개의 vuej 시작 명령이 있는 이유는? (0) | 2022.05.16 |
scanf를 사용하여 공백 입력을 허용하려면 어떻게 해야 하는가? (0) | 2022.05.16 |