首页 > 其他分享 >初学C语言笔记221005

初学C语言笔记221005

时间:2022-10-05 16:31:10浏览次数:45  
标签:p1 int free C语言 char 初学 str NULL 221005

realloc 调整动态内存开辟空间的大小

int* p1 = (int*)malloc(10 * sizeof(int));​

if (p1 == NULL)
{
printf("%s", strerror(errno));
}
else
{
*p1 = 0x12345678;
*(p1 + 1) = 0x789;
}
free(p1);
p1 = NULL;

初学C语言笔记221005_出栈


int *p1 = realloc(NULL,40); //可以当作malloc(40);使用

要避免:
对NULL进行解引用操作,
对动态开辟内存的越界访问
对非动态开辟的内存空间释放
使用free释放动态内存的一部分
对同一块动态内存多次释放
动态内存忘记释放(内存泄漏)

又是考题: 

初学C语言笔记221005_出栈_02

初学C语言笔记221005_动态内存_03

//第一种改正方式
void GetMemory(char **p)
{
*p = (char*)malloc(100);
}
void Test()
{
char *str = NULL;
GetMemory(&str);
strcpy(str,"Hello World");
printf(str);
free(str);
str = NULL;
}
int main()
{
Test();
return 0;
}
//第二种改正方式
char* GetMemory(char *p)
{
p = (char*)malloc(100);
return p;
}
void Test()
{
char *str = NULL;
str = GetMemory(str);
strcpy(str,"Hello World");
printf(str);
free(str);
str = NULL;
}
int main()
{
Test();
return 0;
}

又来一题:

初学C语言笔记221005_内存泄漏_04

返回栈空间地址

非法访问已出栈地址,VS:打印随机值

又来一题:

初学C语言笔记221005_出栈_05

非法访问,但是输出world. 初学C语言笔记221005_内存泄漏_06


初学C语言笔记221005_出栈_07

初学C语言笔记221005_内存泄漏_08

柔性数组:

初学C语言笔记221005_动态内存_09

struct S* ps = (struct S*)malloc( sizeof(struct S)+5*sizeof(int) );
ps->n = 100; //
int i = 0;
for(i = 0; i < 5; i++)
{
ps->arr[i] = i;
}
struct S* ps2 = realloc(ps,44);
free(p1);
free(p2);










标签:p1,int,free,C语言,char,初学,str,NULL,221005
From: https://blog.51cto.com/u_15789360/5732781

相关文章

  • c语言第七课
    字符串与字符数组字符数组定义chararray[1000];字符数组初始化chararray[100]={'a','b','c','d'};chararray[100]="abcd";chararray[100]={0}; //但凡为......
  • C语言学习记录3
    #每日美图分享##include<stdio.h>intmain(){inti=1;while(i<=10){if(i==5)continue;printf("%d\n",i);i++;}return0;}该代码的运行结果为:1234而......
  • C语言每日一题——第八天
    第八天小明学习到了数组,同时,在最近的开发中,他发现很多递归运算存在重复计算相同数值的问题。他决定利用数组缓存运算的结果。有一个数组\(a_{n}\),已知\(a_n=a_{n-2}-......
  • 【C语言】循环语句
    ......
  • C语言:沙漏图形
    #include<stdio.h>#include<math.h>main(){inta,b,c,d;for(a=-9;a<=9;a++){for(b=1;b<=19-abs(a);b++)printf("");for......
  • docker初学
    1.docker:系统平滑移植,容器虚拟化技术,基于go语言实现的云开源项目。一次镜像,处处运行。将应用打包成镜像。解决运行环境和配置问题。2.docker基本组成1.镜像image:类似......
  • 【C语言_14】快速学会使用字符数组
    1.初始化字符数组#include<stdio.h>intmain(){charstr[20]="helloworld";//charstr[20]={'h','e','l','l','o','w','o','r','l','d'};printf("......
  • C语言学习记录2
    先来晒一晒日落~将三个数值从小到大排列:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){intx,y,z,t=0;scanf("%d%d%d",&x,&y,&z);if(x>......
  • C语言变量命名规则
    在定义变量时,变量名可以是字母、数字和下划线的组合。但是也不是随便的组合,要注意以下几个命名规则:1、变量名以英文字母开头;变量名的开头不能是数字,可以由字母或下划线开......
  • C语言读写文件
    1.从键盘输入一些字符,逐个把它们送到磁盘上去,直到用户输入一个'#'#include<stdio.h>#include<stdlib.h>intmain(){FILE*fp;charch,filename[10];......