#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[])
{
char *p[2];
char **pp = calloc(2, 4);
p[0] = "ab";
p[1] = "cd";
// p[2] = "ef";
pp[0] = "ab";
pp[1] = "cd";
pp[2] = "ef";
printf("pp: %s, %s, %s\n", pp[0], pp[1], pp[2]);
printf("size_p: %d\nsize_pp: %d\n", sizeof p, sizeof pp);
}
如果'p [2]'被定义并赋值 - 结果行为是段错误。如果分配了“pp [2]”,则输出如下:“ab,cd,ef”。 'sizeof'对于'p'返回8(每个指针2×4字节),对'pp'只返回4个字节。为什么我能够分配'pp [2]',尽管它应该只拥有8字节的分配内存(应该只能存储2个指针地址)?另外,'sizeof'在两种情况下如何确定实际的内存大小?指针malloc和操作指针
在哪个平台/ OS上运行此程序?你用什么libc? – levu 2011-06-17 09:40:02
@levu Ubuntu,x86_64 GNU/Linux,glibc'2.7-10ubuntu7' – XXL 2011-06-17 09:41:11