후, 우리는 malloc에로의 인스턴스를 할당 : 지금까지 이해 한 내용으로 당malloc을 사용하여 struct를 할당하면 메모리의 어디에 할당 된 struct 필드가 있습니까? 여기에 우리가 구조체를
typedef struct _MyStruct {
struct *nextStruct;
char array[4];
} MyStruct
/* Allocates space on heap for the struct */
_MyStruct *m = malloc(sizeof(MyStruct));
printf("%zu bytes\n", sizeof(MyStruct)); /* Outputs: 8 bytes */
int r;
/* We intentionally overflow the buffer inside of the struct */
r = (int)gets(m->array); /* Input */
if (r == 0)
return;
합니다. 이 확인은 맞습니까?
문자열 'abcde'(5 바이트)를 채울 때 스택에있는 구조체 내부의 char 배열을 오버런합니다.
문자열 'abcdefghi'(9 바이트)를 삽입하면 힙에있는 것으로 가정하는 구조체 자체를 오버런합니다. 그러나 스택의 char 배열을 오버런시킵니다.
편집 : 더 정확하려면이 문제가는 i686에 의해 구현되는 C99 표준을 기반으로 O.S.
아니, char 배열을 포함하는 구조체 m 완전히 힙에 다음 구조체에 대한 포인터를 의미, 힙,하지 힙 자체에 구조체의 구조체의 ADRESS을 덮어 가정합니다 스택에 없습니다. 힙이 있거나 ... 스택이 있다면 ...) – Ctx
나는 그것을 분명히 이해하고있다. :) 나는 여러 개의 가이드를 읽고 있는데, 나는 그것을 망쳐 놓았다. 힘내 친구 야. – another
C 언어에는 스택이 없습니다. – Olaf