|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<stdlib.h>
- #include<malloc.h>
- #include<stdio.h>
- #define MaxSize 100
- //设置静态分配顺序结构
- typedef int ElemType;
- typedef struct
- {
- ElemType data[MaxSize];
- int length;
- }SqList;
- //建立顺序表
- //1.初始化线性表
- void InitList(SqList *&L)
- {
- L = (SqList*)malloc(sizeof(SqList));
- L->length = 0;
- }
- bool ListInsert(SqList *&L, int i, ElemType e)
- {
- int j;
- if (i<1 || i>L->length + 1)
- return false;
- i--;
- for (j = L->length; j > i; j--)
- L->data[j] = L->data[j - 1];
- L->data[i] = e;
- L->length++;
- return true;
- }
- bool ListDelete(SqList *&L, int i, ElemType &e)
- {
- int j;
- if (i<1 || i>L->length)
- return false;
- i--;
- e = L->data[i];
- for (j = i; j < L->length - 1; j++)
- L->data[j] = L->data[j + 1];
- L->length--;
- return true;
- }
- //7.判断是否为空表
- bool ListEmpty(SqList *L)
- {
- return (L->length == 0);
- }
- //8.输出线性表
- void DispList(SqList *L)
- {
- for (int i = 0; i < L->length; i++)
- printf("%d ", L->data[i]);
- printf("\n");
- }
- //9.销毁线性表
- void DestroyList(SqList *&L)
- {
- free(L);
- }
- int main()
- {
- SqList *h;
- int i,e;
- InitList(h);
- printf("输入需要插入的位置:");
- scanf("%d", &i);
- printf("\n输入所插入的元素:");
- scanf("%d", &e);
- ListInsert(h, i, e);
- printf("输入需要插入的位置:");
- scanf("%d", &i);
- printf("\n输入所插入的元素:");
- scanf("%d", &e);
- ListInsert(h, i, e);
- printf("输入需要插入的位置:");
- scanf("%d", &i);
- printf("\n输入所插入的元素:");
- scanf("%d", &e);
- ListInsert(h, i, e);
- printf("H:");
- DispList(h);
- printf("%d\n",ListEmpty(h));
- DestroyList(h);
- printf("H:");
- DispList(h);
- return 0;
- }
复制代码
malloc,和free是相对的。
假设int* h,他本来是随机值,malloc了一个内存空间,意思是 你告诉电脑,这里这块内存我用了,然后把h不知道指向什么地方的指针,挪动到了这个开辟好的内存段上。你用free(h),释放的是h指向的这块空间,意思是,告诉电脑,这块内存我不要了,你可以放垃圾了,但是h的值已经被赋予(指向那个位置没动),你要让h不再是个指向这个位置的指针,就只能让 h=NULL; 。
int* arr = (int*)malloc(sizeof(int)*3);
arr = {1,2,3};
free(arr);
此时就相当于 arr = {-849237123,-830557264,-455723623,-598347279………………………………}
找不到极限了,因为它指向的内存不受程序控制了。
arr这个指针不置空,就相当于你把它指向内存段,事后内存不归他管了,你却还让他指向那里,没把它挪走。
即使程序结束会自动释放堆区,我们也应该及时的释放和置空,不管置空有无意义,不用的指针置空总没错。顶多多写几个代码而已,防止内存泄漏。
|
-
|