【发布时间】:2017-12-23 21:46:47
【问题描述】:
我正在参加哈佛大学的公开在线课程CS50。我上一堂课是关于内存分配和指针(这两个概念对我来说绝对是新的)。
教导的是malloc(10*sizeof(char)) 在堆上分配足够的字节来存储 10 个字符并返回指向第一个字节的指针,该指针可以保存在另一个变量中,如下所示char *x = malloc(10*sizeof(char))。要释放内存,可以使用free(x)。
但是还有另一种方法可以让计算机保留足够的内存来存储 10 个字符,即char c[10]。
- 在
c上面的代码sn-p中也是char*类型的指针吗? -
char c[10]是否也像malloc那样在堆上保留内存? - 分配内存的方法是否等效?
-
char c[3] = "aaa";free(c);返回运行时错误;所以看来我无法释放我用char c[3]分配的内存。这是为什么呢?
我非常感谢为刚刚了解指针的人量身定制的答案。
【问题讨论】:
-
请从现在开始对每个帖子提出一个问题。其中所有 4 个都有重复项,但确实很难将问题作为 4 个重复项来结束。
-
指针只是一个变量,它持有其他东西的地址作为它的值。您通常会想到一个保存立即值的变量,例如
int a = 5;,而指针只会保存存储5的地址,例如int *b = &a;。对于任何动态分配,访问内存块的唯一方法是通过指向起始地址的指针。 (您必须保留一个搬运工到起始地址,以便以后能够free内存)。在这种情况下,malloc返回指向第一个字节的指针是必须的。