programing

munmap_properties(): 잘못된 포인터

prostudy 2022. 5. 16. 21:00
반응형

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

반응형