[問題] 需要free const *char 嗎?

作者: IhateOGC (我討厭)   2014-07-30 21:27:46
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
C
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
NO
問題(Question):
建立了一個struct myStruct Table[]={
{1 , "OGC_0701"},
{2 , "OGC_0702"},
};
1 .程式整個run完之後需要 free Table嗎?
2. 需要對齊嗎? struct size = 5 gcc不支援#pragma (1)該怎對齊?
餵入的資料(Input):
當筆數越來越多的時候...
預期的正確結果(Expected Output):
使用完必須Free乾淨還給使用者記憶體:D
struct myStruct {
int index;
char *string;
};
作者: loveme00835 (髮箍)   2014-07-30 21:31:00
有 malloc() calloc() realloc() 才有 free()不然照你的邏輯 int a; int* pa = &a; 也要 free() 了所謂的字串定義是 "一連串的字元用來描述文字並且以'\0'做為結尾" 你不管是 char* 還是 const*char 還是const char* 都只是 "指標" 而已不是字串!照你的定義, int a; char* str = (char*)&a; 抓隻貓也可以拿來當字串了.. 指標指向的記憶體怎麼來的才是重點, 程式裡面寫 char* str = "hello"; 是編譯器要負責在執行時期要存在一塊記憶體讓你的指標指, 但是並沒有發生動態記憶體配置, str 也不是字串, 是指標. 不管你const 加在哪邊, 還是加在錯的地方, 所謂的字串是指一塊記憶體內的值, 不是指標.那是編譯器實作者才該思考的問題, 記住一樓推文就好.通常這種 string literal 存在愈多, 你編譯出來的執行檔愈肥大, 那些記憶體就類似 static 變數給你指struct size 不是 4的倍數 錯了嗎?你上面兩行跟size無關阿! 除非你現在有client code會存取struct物件, 才需要兩邊都用同樣的memory layout不然 default 就好, 讓編譯器決定它覺得較快的存取方式, 不然你用不同編譯器各自跑在不同平台上,從 primitive type 的 memory layout 就要開始錙銖必較了, gcc 要 pack 也行, 用 __attribute__

Links booklink

Contact Us: admin [ a t ] ucptt.com