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