[问题] 需要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