เรื่องของ Stack และ Heap

วันนี้เป็นอีกวันที่เขียน C อย่างเมามัน และไปงงกับ Error แปลกๆอยู่หลายชั่วโมง เหตุเพราะอยากได้ข้อมูลที่มีพื้นที่ของหน่วยความจำที่ต่อเนื่องกัน ในตอนแรกจึงเลือกใช้ static array สำหรับเก็บค่า ซึ่งตอนหลังก็พบว่าไม่จำเป็นต้องใช้

ลองมาดูตัวอย่างกันดีกว่า

มี function หนึ่ง return ค่า string  หรือถ้าเรียกให้ถูกคือ  address ของหน่วยความจำที่เก็บ string แต่ค่าที่ได้มันกลายเป็นภาษาขยะ ยกตัวอย่างง่ายๆจาก code ด้านล่าง ซึ่งจะ print ตัวอักษร A สิบตัวอักษร

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *
get_var()
{
    char x[11];

    memset(x,65 /*A*/,10);
    x[10] = '\0';

    printf("get_var()\n");
    printf("%s\n", x);

    return x;
}

int
main()
{
    char * y;

    y = get_var();

    printf("%s\n", y);

    return 0;
}

หลังจาก compile และ run ได้ค่าแบบนี้

$ gcc x.c -o x
$ ./x
get_var()
AAAAAAAAAA
��Y��do
อ่านเพิ่มเติม