malloc-an char是否与引用char数组相同?

时间:2013-04-08 13:39:46

标签: c arrays pointers

我认为我的主要是围绕差异,但如果我是正确的,那么这也应该是正确的:

1)

char *string1 = (char*) malloc(runtime_determined_number);

2)。

char string2val[runtime_determined_number];
char *string2 = &string2val;

这里我希望string1和string2相同,是这样的吗?

4 个答案:

答案 0 :(得分:1)

string1string2未指向相​​同的内存区域

string1是指向char动态分配的malloc数组的指针

string2是指向静态分配的char数组的指针

答案 1 :(得分:0)

它们都指向相同长度的未初始化的内存块。所以在这方面他们是一样的,是的。

请注意,在案例1中,一旦完成,您将负责free内存。在情况2中,您无法安全地从函数返回指针,因为内存在退出时将超出范围。

答案 2 :(得分:0)

它们的相似之处在于它们具有相同的类型,并且至少为它们分配了runtime_determined_number个字节。

他们的不同之处在于:

  1. 第一个版本需要显式free()以避免内存泄漏;
  2. 两个物体的寿命可能相同也可能不同。
  3. 请注意,第二个版本仅在C99中有效,因为它使用了可变长度数组。

答案 3 :(得分:0)

使用malloc您要求操作系统在运行时获取内存。如果malloc成功,则可以使用分配的内存。你必须稍后释放这个记忆!
在第二部分中,您将创建一个char - 数组,然后将其地址分配给指针。在这种情况下,内存取自stack,当阵列超出范围时,将自动free
您的char*将与指向内存中不同位置的{{1}}不同。他们有很多机会包含相同的垃圾,因为你没有初始化它们......