#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