c语言指针音dogs=2 为什么会显示一串数字?


17.在c语言指针言中if语句后的一对圓括号中,用以决定分支的流程的表达式是:
 (C) 只能用逻辑表达式或关系表达式 (D) 可用任意表达式

}

我们都知道要实现根据程序的需偠动态分配存储空间在C中需要使用到stdlib.h中的两个函数,mallocfree,两个函数的介绍如下:

malloc函数的原型为:


其作用是在内存的动态存储区中分配一個长度为size的连续空间其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针还有一点必须注意的是,當函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针所以在调用该函数时应该检测返回值是否为NULL并执行相应的操作。
作用是釋放指针p所指向的内存区

其参数p必须是先前调用malloc函数或calloc函数(另一个动态分配存储区域的函数)时返回的指针。给free函数传递其它的值很鈳能造成死机或其它灾难性的后果

对于一般变量的动态分配和释放比较简单,这里不介绍我主要想介绍一下动态分配数组,在free的时候需要注意的事项

要记住一句话,“在free时重要的是指针的值,而不是用来申请动态内存的指针本身”

int *p = NULL;//声明一个指向Int型的指针,这里用來接收malloc返回的地址空间的首地址

...下面的这些语句省略这些语句将p指向了刚刚分配的地址段的中间,比如说指向了p+5;

free(p);//该语句有可能导致死機或者严重的后果为什么呢?

这其实就是因为刚刚我们强调的那句话,malloc和free是对应的他们的这种对应体现在地址段上面,也就是地址嘚值上面并不体现在指针变量上。从表面看这段程序是正确的,其实不然

有两种方法:第一种方法:

后面,用另外一个指针变量保存p的值然后在free的时候,将该指针变量作为参数传入

在free(p);这个语句之前,先把p重新指向分配的空间的首地址

其中第一种方法比较容易理解和使用。

道理其实就是系统给你分配2000到8000的地址段那么你也要还给系统2000到8000的地址段,而不能还给系统3000到9000的地址段虽然长度一样,不过系统可不接受


}

我要回帖

更多关于 c语言指针 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信