
正文
c语言数组释放完后变成什么,c语言如何把数组清零
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
c语言中二维数组释放问题,谢谢
在实际使用中,是没有错误的。因为,任何指针都是一样的(就是个内存地址,只是因为地址中存储的数据类型不同,指针的类型不同)
编译器,在编译时,会检查函数参数类型与调用类型是否相同,如果不同,则会报错误或是警告,这在不同的编译器上表现不一样。
一般在写代码时,严格来说,调用函数时的实参一定要与实参类型相一致,否则,有可能会出错误。
综上,如果不想看到编译警告,则应该在调用时,加上强制转换,就可以了。(向编译器表明,我知道不同,但就是想这样用),如:
int
**intPtr
;
....
FreeArray2(
10,
(void**)
intPtr
);
相关问答
Q1: c语言字符数组如何释放消毁?
你提问中定义方式是在函数完成前释放不了的,你定义的字符数组,放在stack空间,不能用free()试图释放堆中的内容,因为那里是一段程序运行的保证。
只有使用malloc()在栈空间开辟的动态内存才能被释放!
如果你后面的代码想继续用这个数组名的话,这个数组还是可以重新赋值。你可以把你用到的数据独到这个变量中就行了!
你定义的anto数组在函数完成后,系统自己就回收了!
Q2: C语言中再次释放已经释放的空间会造成什么后果?
free再次释放已释放的空间,不会有任何释放效果,因为free释放地址,是对地址作标记,表示该地址未被使用,可以再次用于分配。并不是说内存就消失了。
(注意:1,free后原内存中的数据,不变或被重置。2,free后不会自动将指针置NULL,需要手动置NULL,继续用指针访问已释放的地址是不安全的。)
下面演示代码(正常不要这么写!!!)
#include stdio.h
#include malloc.h
int main()
{
int *p=NULL;
p=(int *)malloc(sizeof(int));
*p=123;
printf("p初值:%d\n",*p);
free(p);
printf("第一次释放后!\n");
printf("p=%d\n",*p);
printf("指针未置NULL的情况下,再次给指针指向地址赋值123后:\n");
*p=123;
printf("p再次赋值%d\n",*p);
free(p);
printf("再次释放后\n");
printf("p=%d\n",*p);
return 0;
}
Q3: 关于c语言函数,函数里的数组在函数结束后是不是就释放了?
line数组会在函数执行结束后释放,因为它属于函数里的局部变量。
所谓的释放不是说这个数组已经消失得无影无踪,而是说它现在所占据的空间可以由其他数据再次使用(即覆盖),我们不要再去访问这个line数组了,因为它的内容随时可变。
Q4: C语言中如何释放已定义的数组空间?
变量用delete释放,数组用delete[]释放,指针的类型不能改变。对于一些简单的情况(所有成员都是基本数据类型,没有析构函数),可以直接用delete释放。
例:
structNODE
{
intidata;
doubleddata;
}node[100];
//释放空间
delete[]node;
//所有的数组类型释放空间都这样写
扩展资料
C语言数组
数组的声明并不是声明一个个单独的变量,比如number0、number1、...、number99,而是声明一个数组变量,比如numbers,然后使用numbers[0]、numbers[1]、...、numbers[99]来代表一个个单独的变量。数组中的特定元素可以通过索引访问。
所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。
关于c语言数组释放完后变成什么和c语言如何把数组清零的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。





