我想我的头脑主要是围绕差异,但如果我是正确的,那么这也应该是正确的:
1.)
char *string1 = (char*) malloc(runtime_determined_number);
2.)
char string2val[runtime_determined_number];
char *string2 = &string2val;
在这里我希望 string1 和 string2 相同,是这样吗?
string1
并且string2
没有指向同一个内存区域
string1
是指向char
动态分配的数组的指针malloc
string2
是指向char
静态分配数组的指针
它们都指向相同长度的未初始化内存块。所以在这方面它们是相同的,是的。
请注意,在第 1 种情况下,您有责任free
在完成后重新创建内存。在情况 2 中,您不能安全地从函数返回指针,因为内存将在退出时超出范围。
它们的相似之处在于它们具有相同的类型并且至少runtime_determined_number
为它们分配了字节。
它们的不同之处在于:
free()
以避免内存泄漏;请注意,第二个版本仅在C99中有效,因为它使用了可变长度数组。
使用malloc
您在运行时向操作系统请求内存。如果malloc
成功,您就可以使用分配的内存。您必须稍后释放此内存!
在您的第二部分中,您将创建一个char
-array,然后将其地址分配给一个指针。在这种情况下,内存是从 d 中取出的,当数组超出范围时stack
将自动 d 。
您的 s 将与它们指向内存中的不同位置不同。它们很有可能包含与您未初始化它们相同的垃圾......free
char*