최근에 C 포인터에 문제가 발생했습니다. 보시다시피, STDIN에서 데이터를 읽는 루프가 있습니다. 문제는 내가 한 일을 이해하지 못한다는 것입니다.C - 메모리 할당 문제 - 필요 설명
이 struct_CONTAINER 구조체에 메모리를 할당했습니다. 내부에 BUFFER_SIZE 길이의 C- 문자열 배열이 필요했습니다. 올바르게 이해한다면,이 배열은 BUFFER_SIZE (char *) 객체를 포함합니다 -이 배열의 가중치는 8 * BUFFER_SIZE 바이트 (각 char 포인터 당 최대 8 바이트)가된다는 의미입니다. 예를 들어, BUFFER_SIZE가 값 10으로 정의 된 경우이 배열에 대해 80 바이트가 주어지며 아마도 전체 구조가 비슷한 크기를 갖게됩니다.
문제는 그 포인터에 대해 BUFFER_SIZE보다 큰 값으로 반복 할 수 있으며, 저에게 이상한 점은 메모리가 NULL이 아니라는 것입니다. 그 루프에서 나는 이미 할당 된 다른 메모리에 접근하려고 할 수도 있다는 것을 알고 있습니다. 그러나 나는 확실하지 않다. 누군가가 좋을 것이고 내가 옳고 그른 일을하고 있다고 나에게 말하면. 메모리 할당이 너무 많을 수 있습니다. 미리 감사드립니다!
char *item = NULL;
if(dup2(STDIN_FILENO, fdin) < 0){
perror("dup2()");
exit(errno);
}
memset(reading, '\0', BUFFER_SIZE);
struct struct_CONTAINER{
char *container[BUFFER_SIZE];
};
while((r_control = read(fdin, reading, BUFFER_SIZE-1)) > 0){
item = &shmemContainer->container[i++];
strcpy(item, reading);
memset(reading, '\0', BUFFER_SIZE);
}
편집 : 나는 container
은 문자열의 배열을 의미 char*
유형 인 "항목"변수
항목 유형이 도움이되지 않습니다. @Grijesh Chauhan의 답을 읽어보십시오. – Aneri
"컨테이너"배열이 가리키는 문자열에 대해 다른 곳에 메모리를 할당합니까? – Digikata
@Digikata 당신이 맞습니다 이것은 OP에 의한 추가 오류 일 수 있습니다. 당신이 내 대답은 –