(分配类型 *)malloc(分配元素个数 *sizeof(分配类型)) 如果成功,则返回该空间首地址,该空间没有初始化,如果失败,则返回0
问题:
int * p = (int *)malloc(10); //我如果为整形数组p分配10个字节; p[0] = 0;p[1]= 1;p[2]=2; printf("%d%d%d\n", sizeof(p[0]),sizeof(p[1]),sizeof(p[2])); //为p数组分配三个元素输出为4 4 4,那不是有12个字节了吗? //请帮我解释一下,谢谢!!!!!!!!
malloc函数为p分配空间有什么用;p也不受malloc限制吗;
回答:
是这样,你的确用malloc分配了10个字节的空间,但你后来p[2]赋值时因为Int占四个四节,于是p[2]的首地址是你分配的10个字节的第九个字节的地址,于是你往里面写入数据,以为是Int类型,于是会超出你所分配的10个字节,多出两个字节,而这两个字节并没有被申请,而是写入了“邻居”的地址,但是你这样输出printf("%d%d%d\n", sizeof(p[0]),sizeof(p[1]),sizeof(p[2])); sizeof(p[2])其实相当于sizeof(int),于是输出是4, 所以建议你要正确的使用malloc 如下 int* p = (int *) malloc ( sizeof(int) * 10 );