3 回答
TA贡献1890条经验 获得超9个赞
这里的问题是问题。让我们假设你有一个很小的C(++也是,他们以相同的方式处理这个)程序,如下所示:
/* my.c */
char * str = "Your dog has fleas."; /* 1 */
char * buf0 ; /* 2 */
int main(){
char * str2 = "Don't make fun of my dog." ; /* 3 */
static char * str3 = str; /* 4 */
char * buf1 ; /* 5 */
buf0 = malloc(BUFSIZ); /* 6 */
buf1 = malloc(BUFSIZ); /* 7 */
return 0;
}
这既不在堆上的堆栈NOR上分配。相反,它被分配为静态数据,并在大多数现代机器上放入自己的内存段。实际的字符串也被分配为静态数据,并放入正确思考的机器中的只读段。
只是一个静态分配的指针; 静态数据中的一个地址空间。
具有在堆栈上分配的指针,并且在main返回时将被有效地释放。字符串,因为它是一个常量,在静态数据空间中与其他字符串一起分配。
实际上分配与2完全相同。static关键字告诉您它不会在堆栈上分配。
......但是buf1在堆栈上,并且
... malloc的缓冲区空间在堆上。
顺便说一下,孩子们不要在家里试试。 malloc具有感兴趣的回报值; 你应该经常检查返回值。
例如:
char * bfr;
if((bfr = malloc(SIZE)) == NULL){
/* malloc failed OMG */
exit(-1);
}
- 3 回答
- 0 关注
- 524 浏览
添加回答
举报