저는 C가 처음이므로 실수를 바로 잡으십시오. Malloc은 C 문자열에 대해 쓰레기가 있습니까?
// some variables declared here like int array_size
char* cmd = (char*)malloc(array_size*sizeof(char));
for(;;){
// code here sets cmd to some string
free(cmd);
array_size = 10;
cmd = (char*)malloc(array_size*sizeof(char));
// print 1
printf(cmd);
printf("%d\n", strlen(cmd));
// repeat above for some time and then break
}
그래서 나는 잠시 동안 루프를 수행하고 출력 무엇을 참조하십시오
나는 약간 이렇게되면 일부 코드가 있습니다. 내가 예상 한 것은 문자열이 비어 있고 길이가 0이 될 때마다였습니다. 그러나 그 경우는 아닙니다. 분명히 때때로 malloc은 정크로 메모리를 가져오고 쓰레기와 메모리는 길이가 있습니다! = 0 그래서 malloc이 반환 될 때 새로운 char 문자열의 모든 char을 '\ 0'으로 설정하여이 문제를 해결하려고했습니다. 그러나, 나는 정말로 내가 뭔가 잘못했다고 확신한다. 문자열을 풀고 첫 번째 malloc과 달리 문자열에 정크가 들어있는 완전히 새로운 malloc을 수행 한 후에도 왜 그런가요? 내가 도대체 뭘 잘못하고있는 겁니까?
malloc의 반환 값의 형 변환이 나쁜 스타일이라고 생각하는 사람이 있고, 더 일반적으로'type * t = malloc (n * sizeof * t); ' 'type'을 변경해야 할 경우 첫 번째 행은 하나의 변경 만 필요로하고 두 번째 행은 3을 필요로하기 때문에'type * t = (type *) malloc (n * sizeof (type)); realloc' 호출은 변경 사항과 비교하여 2 가지 변경 사항이 없음). –
잘못된 스타일 일뿐만 아니라, 그렇지 않으면 malloc 프로토 타입을 포함하는 헤더를 포함하는 것을 잊어 버리는 오류를 숨 깁니다. int가 포인터와 다른 너비 인 환경에서는 치명적일 수 있습니다. 다른 문제의 부분은 – paxdiablo