구조체 멤버에 4096 개의 문자열을 저장하려는 고유 한 경우가 있습니다. 그러나, 나는 짧은 문자열 메모리의 보통 양을 mallocing 해요,하지만 여전히 Valgrind의 오류가 점점 오전 :큰 문자열을 mallocing 할 때 크기 1을 잘못 읽음
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct List {
char * name;
int grade;
struct List * next;
};
int main(void) {
struct List * newList;
char * bigString;
int i;
bigString = malloc(sizeof(char)* 4096);
for (i=0; i<4096; i++)
bigString[i] = 'a';
newList = malloc(sizeof(struct List));
newList->next = NULL;
newList->name = malloc(strlen(bigString)+1);
free(bigString);
free(newList->name);
free(newList);
return 0;
}
라인 :
newList->name = malloc(strlen(bigString)+1);
오류를 반환 Invalid read of size 1
그러나 잠시 기다려주세요. 문자열의 길이가 더 늘어났습니다. 널 종료자를 위해 1을 더한 것입니다. 여기서 무슨 일이 일어나고있는 걸까요?
는 사실 난이 시도 :
newList->name = malloc(sizeof(char) * strlen(bigString) +1);
을 그리고 도대체 나는 심지어 malloc을 호출 한 후 문자열 종료 null로 시도 .. 아무 소용
newList->name[strlen(bigString)] = '\0';
을
I을 사실 내가 여기서 잘못한 것을 혼란스럽게합니다. 어떤 아이디어?
bigString = malloc (sizeof (char) * 4096); -> bigString = malloc (sizeof (char) * 4096 + 1); bigString [4096] = 0;' – BLUEPIXY
크기가 1 인 잘못된 쓰기를 반환합니다 :/ – ererere
'i <4096 '을 변경 했습니까? – BLUEPIXY