即使使用malloc,两个char*也可以拥有相同的内存地址吗?

Dal*_*eme -1 c c++ malloc pointers char

我明白如果我有以下内容:

char* c1 = "apple";
char* c2 = "apple";
Run Code Online (Sandbox Code Playgroud)

然后这两个char*可以具有完全相同的内存地址.但如果我有以下内容怎么办:

char* c1 = (char*)malloc(sizeof(char)*10);
memset(c1, 0, 10);
c1[0]='a';c1[0]='p';c1[0]='p';c1[0]='l';c1[0]='e';
char* c2 = (char*)malloc(sizeof(char)*10);
memset(c1, 0, 10);
c2[0]='a';c2[0]='p';c2[0]='p';c2[0]='l';c2[0]='e';
Run Code Online (Sandbox Code Playgroud)

即使在这种情况下,c1和c2是否可能具有相同的地址?

Yu *_*Hao 7

实际上在第一种情况下,其中c1c2都是字符串文字的指针:

char* c1 = "apple";
char* c2 = "apple";
Run Code Online (Sandbox Code Playgroud)

是否c1c2具有相同的值是不确定的.换句话说,他们可能或可能没有相同的地址.


在第二种情况下,只有两次调用失败时,唯一可能的c1并且c2具有相同的值malloc,在这种情况下它们都是空指针.否则,它们将具有不同的值.

这就是你应该检查返回值的原因malloc.


Mar*_*iot 5

的malloc将返回唯一地址或NULL的c1c2,因此,除非malloc的两个失败的值会有所不同.除了NULL情况之外,malloc没有办法神奇地为相同的值返回相同的地址.

但是,你当然可以说:

c2 = c1;
Run Code Online (Sandbox Code Playgroud)

并且c2会将内存中的相同位置称为c1.

  • 当然有办法.如果内存不足,Malloc可以返回NULL.然后c2 = c1 = NULL. (6认同)