GetMem只为数据结构已知大小的数据类型从内存管理器MemoryManager中取得指定大小的内存,所以他并没有为尚未确定的s分配内存,其指向仍然为nil;但如果使用New为ptest申请内存,则会在_New里申请完内存后,调用_Initialize(_InitializeArray)分配结构体里特殊部分的内容(例如:string类型),此时字符串类型不再指向nil,所以不会出错。Delphi的帮助简单地推荐使用new:Note: It is considered preferable to use the New and Dispose procedures rather than GetMem and FreeMem.事实上,在编译器的调控下,New和Dispose是一个智能函数,他们会根据指针内容的不同,处理指针内一些特殊字段的内存申请和释放;