malloc是否将内存从0分配给正无穷大?

use*_*466 0 c

我写了一个测试程序,认为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`返回的地址,用其他地址替换它们. (2认同)

Jam*_*lis 8

malloc可以从堆中的任何位置给你一个指针; 它完全取决于它如何分配内存.

指针值仅限于您的地址空间范围(因此,在32位地址空间中,您将不会获得大于2 ^ 32 - 1的指针值).