#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int *p=NULL;
int a = 2;
p = (int *)malloc(sizeof(int)*5);
memcpy(&p[2], &a, sizeof(int));
printf("%d %#x\n", p[2], &p[2]);
return 0;
}
我在CFree上 调试, 可以看到开辟的内存地址:
0x3e2590 : 0d f0 ad ba 0d f0 ad ba 而 &p [2] 的地址: (int *) 0x3e2598
0x3e2598 : 02 00 00 00 0d f0 ad ba
0x3e25a0 : 0d f0 ad ba 0d f0 ad ba
0x3e2598: ab ab ab ab ee fe ee fe
0x3e25b0: 00 00 00 00 00 00 00 00
从上可以看到, p[2] 使用的是 开辟的链表的第二个元素 , 而不是第三个。
本文详细解析了C语言中使用malloc函数分配内存的过程,并通过实例展示了如何正确地使用指针来访问和修改分配的内存空间。通过对比p[2]与&p[2]的地址,揭示了C语言中内存分配与指针交互的微妙之处。
1万+

被折叠的 条评论
为什么被折叠?



