malloc 및 free 사용 : 유효하지 않은 다음 크기 오류

물고기

malloc 및 무료 사용에 대해 혼란 스럽습니다. 여기에 내 예제와 코드가 있습니다.

명확하게하기 위해 파일에서 행을 읽고 배열에 쓰고 싶다고 가정합니다. 파일 형식은 다음과 같습니다.

3
abc
def
ghi
jkl
mno
pqr

처음 세 줄은 array1에 저장하고 나머지는 array2에 저장하고 싶습니다.

코드:

int num;

FILE *fin = fopen("filename", "r");

/*Read the first line of the file*/
fscanf (fin, "%d", &num);

char **array1 = malloc(sizeof(char *) * num);
char **array2 = malloc(sizeof(char *) * num);

/*Apply sizeof(num * num) memory blocks and set the first address to array1[0]*/
array1[0] = malloc(sizeof(char) * num * num);
array2[0] = malloc(sizeof(char) * num * num);

/*Allocate the address of each (char *) array pointer*/
int i;
for (i = 0; i < num-1; i++)
{
    array1[i+1] = array1[i] + num;
}

for (i = 0; i < num; i++)
{
    fscanf(fin, "%s", array1[i]);
}

free함수를 호출 할 때 문제가 발생 합니다.

/*ERROR: free(): invalid next size (fast): 0x0804b318(gdb)*/
free(array1[0]);
free(array1);

주소 0x0804b318이 array1 [0]이므로 할당 된 메모리 블록이 충분하지 않을 수 있습니다. 더 크게 만들려면 :

array1[0] = malloc(sizeof(char) * (num+1) * (num+1));

그리고 그것은 효과가 있었지만 파일의 처음 세 줄이 다음과 같기 때문에 이것에 대해 혼란 스럽습니다.

abc
def
ghi

malloc함수는
3 개의 줄 을 저장 하기에 충분한 3 * 3 문자 배열에 대한 포인터를 반환합니다 . 왜 (3 + 1) * (3 + 1)이 필요한가요?

풀다

문자열은 종료 '\0'문자 와 함께 저장 되며 공간도 차지합니다. 따라서 3 자 문자열을 저장하려면 4 자용 공백이 필요합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++ free () : 유효하지 않은 다음 크기 (빠름)

분류에서Dev

맵 크기 및 mmap 유효하지 않은 인수 오류

분류에서Dev

free () : 유효하지 않은 다음 크기 (보통) & munmap_chunk () : C에서 유효하지 않은 포인터

분류에서Dev

이전에 알려지지 않은 크기의 문자열에서 sprintf를 사용하여 free () 잘못된 다음 크기를 생성하십시오.

분류에서Dev

C realloc : 유효하지 않은 다음 크기, aSan은 heap-use-after-free를 말합니다.

분류에서Dev

무작위 오류 코어 덤프 :`./a.out '오류 : free () : 유효하지 않은 다음 크기 (빠름) : 0x00000000010e8d70 *** 중단됨 (코어 덤프 됨)

분류에서Dev

***`./a.out '오류 : realloc () : 유효하지 않은 다음 크기 : 0x00000000009c4010 ***

분류에서Dev

const char *** 변수에 메모리를 할당 할 때 "realloc () : 유효하지 않은 다음 크기"오류

분류에서Dev

유효성 검사 오류 : 'on'값은 << property name >>에 유효하지 않습니다.

분류에서Dev

오류 : 매크로를 사용하여 바이너리 +에 대한 유효하지 않은 피연산자 ( 'char *'및 'char *'포함)

분류에서Dev

런타임 오류 '0': Selenium, vba 및 css 선택기를 사용하여 단추를 클릭하는 SeleniumError 유효하지 않은 인수

분류에서Dev

눈송이 유효성 검사 기능이 오류를 표시하지 않음

분류에서Dev

맞춤 유효성 검사기가 오류를 표시하지 않음

분류에서Dev

dlsym ()을 사용하여 malloc / free를 스텁하면 분할 오류가 발생합니다.

분류에서Dev

ValidationError [SequelizeValidationError] : 유효성 검사 오류 : 유효하지 않은 유효성 검사기 함수 : nonEmpty,

분류에서Dev

데이터 유효성 검사 및 데이터가 유효하지 않은 경우 오류 메시지 표시

분류에서Dev

재귀 파일 스캔 기능에서 malloc 및 free 사용

분류에서Dev

유효하지 않은 다음 크기 오류가있는 동적 부호없는 문자 배열을 재 할당 할 때 오류 발생

분류에서Dev

npm과 함께 ReactJS 사용 및 다음 오류 발생 (예기치 않은 토큰)

분류에서Dev

malloc 및 free없이 힙 할당 가변 크기 개체 저장 및 재활용

분류에서Dev

apt-get update 실행시 "릴리스 파일이 아직 유효하지 않습니다."및 기타 오류

분류에서Dev

COMM 및 SORT를 사용하는 Bash 스크립트가 예기치 않은 토큰 근처에서 구문 오류를 발생시킵니다.

분류에서Dev

찾기 및 바꾸기 ':'콜론은 모두 바꾸기에서 "해당 함수가 유효하지 않습니다"오류를 제공합니다.

분류에서Dev

Tensorflow가 유효성 검사 손실 및 유효성 검사 정확도를 기록하지 않음

분류에서Dev

"사용자 정의 유형이 정의되지 않음"오류를 방지하기위한 늦은 바인딩

분류에서Dev

Valgrind 오류 : struct 및 malloc으로 구성된 목록을 사용하는 동안 크기 8의 잘못된 쓰기

분류에서Dev

오류 glibc에서 free () 감지 : 잘못된 다음 크기 (빠름)

분류에서Dev

정의되지 않은 변수와 isset 및 오류 다시 사용

분류에서Dev

VKSdk.authorize () 후 VKRequest에서 "유효하지 않은 사용자 ID"오류가 발생합니다. 차례로?

Related 관련 기사

  1. 1

    C ++ free () : 유효하지 않은 다음 크기 (빠름)

  2. 2

    맵 크기 및 mmap 유효하지 않은 인수 오류

  3. 3

    free () : 유효하지 않은 다음 크기 (보통) & munmap_chunk () : C에서 유효하지 않은 포인터

  4. 4

    이전에 알려지지 않은 크기의 문자열에서 sprintf를 사용하여 free () 잘못된 다음 크기를 생성하십시오.

  5. 5

    C realloc : 유효하지 않은 다음 크기, aSan은 heap-use-after-free를 말합니다.

  6. 6

    무작위 오류 코어 덤프 :`./a.out '오류 : free () : 유효하지 않은 다음 크기 (빠름) : 0x00000000010e8d70 *** 중단됨 (코어 덤프 됨)

  7. 7

    ***`./a.out '오류 : realloc () : 유효하지 않은 다음 크기 : 0x00000000009c4010 ***

  8. 8

    const char *** 변수에 메모리를 할당 할 때 "realloc () : 유효하지 않은 다음 크기"오류

  9. 9

    유효성 검사 오류 : 'on'값은 << property name >>에 유효하지 않습니다.

  10. 10

    오류 : 매크로를 사용하여 바이너리 +에 대한 유효하지 않은 피연산자 ( 'char *'및 'char *'포함)

  11. 11

    런타임 오류 '0': Selenium, vba 및 css 선택기를 사용하여 단추를 클릭하는 SeleniumError 유효하지 않은 인수

  12. 12

    눈송이 유효성 검사 기능이 오류를 표시하지 않음

  13. 13

    맞춤 유효성 검사기가 오류를 표시하지 않음

  14. 14

    dlsym ()을 사용하여 malloc / free를 스텁하면 분할 오류가 발생합니다.

  15. 15

    ValidationError [SequelizeValidationError] : 유효성 검사 오류 : 유효하지 않은 유효성 검사기 함수 : nonEmpty,

  16. 16

    데이터 유효성 검사 및 데이터가 유효하지 않은 경우 오류 메시지 표시

  17. 17

    재귀 파일 스캔 기능에서 malloc 및 free 사용

  18. 18

    유효하지 않은 다음 크기 오류가있는 동적 부호없는 문자 배열을 재 할당 할 때 오류 발생

  19. 19

    npm과 함께 ReactJS 사용 및 다음 오류 발생 (예기치 않은 토큰)

  20. 20

    malloc 및 free없이 힙 할당 가변 크기 개체 저장 및 재활용

  21. 21

    apt-get update 실행시 "릴리스 파일이 아직 유효하지 않습니다."및 기타 오류

  22. 22

    COMM 및 SORT를 사용하는 Bash 스크립트가 예기치 않은 토큰 근처에서 구문 오류를 발생시킵니다.

  23. 23

    찾기 및 바꾸기 ':'콜론은 모두 바꾸기에서 "해당 함수가 유효하지 않습니다"오류를 제공합니다.

  24. 24

    Tensorflow가 유효성 검사 손실 및 유효성 검사 정확도를 기록하지 않음

  25. 25

    "사용자 정의 유형이 정의되지 않음"오류를 방지하기위한 늦은 바인딩

  26. 26

    Valgrind 오류 : struct 및 malloc으로 구성된 목록을 사용하는 동안 크기 8의 잘못된 쓰기

  27. 27

    오류 glibc에서 free () 감지 : 잘못된 다음 크기 (빠름)

  28. 28

    정의되지 않은 변수와 isset 및 오류 다시 사용

  29. 29

    VKSdk.authorize () 후 VKRequest에서 "유효하지 않은 사용자 ID"오류가 발생합니다. 차례로?

뜨겁다태그

보관