0

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

1.)

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

2.)

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

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

4

4 回答 4

1

string1并且string2没有指向同一个内存区域

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

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

于 2013-04-08T13:42:36.380 回答
0

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

请注意,在第 1 种情况下,您有责任free在完成后重新创建内存。在情况 2 中,您不能安全地从函数返回指针,因为内存将在退出时超出范围。

于 2013-04-08T13:41:20.097 回答
0

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

它们的不同之处在于:

  1. 第一个版本需要显式free()以避免内存泄漏;
  2. 两个对象的生命周期可能相同也可能不同。

请注意,第二个版本仅在C99中有效,因为它使用了可变长度数组。

于 2013-04-08T13:42:09.363 回答
0

使用malloc您在运行时向操作系统请求内存。如果malloc成功,您就可以使用分配的内存。您必须稍后释放此内存!
在您的第二部分中,您将创建一个char-array,然后将其地址分配给一个指针。在这种情况下,内存是从 d 中取出的,当数组超出范围时stack将自动 d 。 您的 s 将与它们指向内存中的不同位置不同。它们很有可能包含与您未初始化它们相同的垃圾......free
char*

于 2013-04-08T13:42:54.790 回答