用了free(*T)还要用一个NULL呢?这两个的作用有啥不一样?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用了free(*T)还要用一个NULL呢?这两个的作用有啥不一样?相关的知识,希望对你有一定的参考价值。
free(*T)还是将内存释放了,NULL在sring.h里#define NULL 0,这里的free跟NULL的作用分别是什么?
两者意思大不一样,你搞混了!free(T);是释放T指针指向的地址开头的一片空间,到底有多大必须是由malloc函数事先分配的已知数;但释放T指向的空间不是释放T指针,T一旦声明,在C中就释放不了了,它永远存在。为了防止后面误用T带来危险,常让它等于0(就是NULL);等于NULL的指针叫空指针,是使用不成的,这就避免了误用带来的危险。以后要用T时要重新赋值…… 参考技术A free是释放内存,将T赋值为NULL是防止非法操作 参考技术B free之前必须有malloc或calloc动态分配过内存,必须成对使用,就是说分配了就要free释放比如你一次分配了一段10字节的内存空间,在程序结束前,要free一次,
依次,分配过几次,就要free几次,
free的作用和malloc或calloc相反,malloc是向系统申请了内存,free就是把这些内存还给系统
要注意,free(T)的时候,T必须指向分配后最初的地址
如果没有申请,声明T是没有初始化,T就会随机指向一个地址,如果释放会出错,也就是要注意在程序中添加检查代码,使用T=NULL,就可以这样free:
if(T) free(T);
也可以这样分配:
if(T) T=malloc(...);本回答被提问者和网友采纳
UVA10118Free Candies
一开始看数据范围不大想直接暴力搜索,仔细考虑搜索的状态会有很多重复,搜索量仍然很大。
这就是传说中的记忆化搜索。。。number数组表示每一列取了多少个数,ans每一列取得相应数字个数时的最优解。
第九章前面的代码用了引用,在记忆化搜索里面很方便。这个题还要注意搜索的时候要回溯,搜不下去了要尝试另一种。
1 #include <stdio.h> 2 #include <iostream> 3 #include <bits/stdc++.h> 4 #include <cstdio> 5 6 using namespace std; 7 8 typedef long long ll; 9 const int maxn = 40 + 10; 10 int G[maxn][4]; 11 int ans[maxn][maxn][maxn][maxn]; 12 bool book[maxn*maxn]; 13 int number[4]; 14 int n; 15 16 int dfs(int cnt,int a,int b,int c,int d) 17 { 18 number[0] = a, number[1] = b, number[2] = c, number[3] = d; 19 int & num = ans[a][b][c][d]; 20 if(num != 0 || cnt >= 5)return num; 21 int sum = 0; 22 for(int i = 0 ; i < 4 ; i ++) 23 { 24 if(number[i] >= n)continue; 25 int v = G[number[i]][i]; 26 number[i]++; 27 if(!book[v]) 28 { 29 book[v] = true; 30 sum = max(sum,dfs(cnt-1,number[0],number[1],number[2],number[3])+1); 31 book[v] =false; 32 number[i] --; 33 } 34 else 35 { 36 book[v] = false; 37 sum = max(sum,dfs(cnt+1,number[0],number[1],number[2],number[3])); 38 book[v] = true; 39 number[i]--; 40 } 41 } 42 num += sum; 43 return num; 44 } 45 int main(int argc, char const *argv[]) 46 { 47 while (cin >> n && n) 48 { 49 memset(ans, 0, sizeof(ans)); 50 memset(book,true,sizeof(book)); 51 for (int i = 0 ; i < n ; i++) 52 for (int j = 0 ; j < 4 ; j++) 53 cin >> G[i][j]; 54 cout << dfs(0,0,0,0,0) << endl; 55 } 56 return 0; 57 }
以上是关于用了free(*T)还要用一个NULL呢?这两个的作用有啥不一样?的主要内容,如果未能解决你的问题,请参考以下文章
为啥free函数不在释放内存后,将指针置NULL,野指针有啥用