我写了一个测试程序,认为p1的地址小于p2,但是当我编译代码时,p2的地址变得更低(p1比p2大8个单元).我还听说有传言说2个相邻的内存块会自动组合起来.这是否在以下代码中起作用?
void main(){
char *p1, *p2;
p1=malloc(4);
p2=malloc(5);
p1="yah";
p2="goog";
printf(" p1 = %d, and p2 = %d \n", p1, p2);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*wis 12
您不是打印从malloc返回的地址,而是打印字符串文字的地址(静态分配).如果你想填充块,请使用strcpy; 但是,这样做不需要打印地址.
另外,使用%p打印指针.
malloc可以从堆中的任何位置给你一个指针; 它完全取决于它如何分配内存.
指针值仅限于您的地址空间范围(因此,在32位地址空间中,您将不会获得大于2 ^ 32 - 1的指针值).