linux运行python程序,linux下进程编程
野针轮廓
通配符指针通常意味着保存在指针变量中的值不会死于非法的内存地址,但会被访问。请注意,通配符指针不是空指针,而是内存不可用的指针。
在C语言中,可以判断空指针,但不能判断非空指针是否为空指针。
野生针叶的个体起源如下。
一些指针变量未初始化。
#包括
int main())
{
char * p;
srcpy(p,哈哈);//野针
0;
}
应用释放的指针。
int main())
{
int * p=(int *)malloc(sizeof)int))5;
免费(p;
* p=1;//野针
0;
}
指针所指的内存空间将在应用之前被丢弃。
#包括
char *fun())
{
char p[]=哈哈;
回p;
}
int main())
{
char * p=fun(;
printf(%s(n),p);//野针
0;
}
该指南的典型谬误
指示的变量未初始化。
指针指向的内存没有分配足够的内存。
结构守护进程
{
int * p;
}
int main())
{
结构演示d1、D2;
int I;
for(I=0;i 10I ) {
D1 . p[I]=I;//未初始化
}
D2。P=(int* ) calloc(5) 5,sizeof(int));
for(I=0;i 10I ) {
D2 . p[I]=I;//超出界限,没有足够的空间
}
免费(D2。p);
0;
}
内存设置成功,但未初始化。
#包括
#包括
int main())
{
char * s=(char *)malloc)10;
printf(%s(n),s);//字符串以“\0”作为终止符,所以在初始化之前不知道“\0”在哪里。
免费(s;
0;
}
数组越界
#包括
voidfun(inta[10])
{
int I;
for(I=0;i 10I ) {
a[I]=I;//中转
printf(%d(n),a[I];
}
}
int main())
{
int a[5];
好玩(一);
0;
}
开放内存
无符号intsize)。
{
int * p=malloc(sizeof(int)* size);
int I;
如果(大小% 2!=0}{
返回;//请求的内存没有被释放。
}
for(I=0;I尺寸;I ) {
p[I]=I;
printf(%d(n),p[I];
}
免费(p;
}
这里显而易见的是,在设计函数时,期望单进制传输。
多次释放指针
voidfun(int*p,int size).
{
int I;
for(I=0;I尺寸;I ) {
p[I]=I;
printf(%d(n),p[I];
}
免费(p;
}
int main())
{
int * p=(int *)malloc)5 * sizeof)int);
趣味(p,5);
免费(p;//发布多次
0;
}
这里在内存操作时,给出了“谁申请,谁释放”的指引,释放后指针可以清零。
应用释放的指针。
voidfun(int*p,int size).
{
int I;
for(I=0;I尺寸;I ) {
printf(%d(n),p[I];
}
免费(p;
}
int main())
{
int * p=malloc(5 * sizeof)int);
int I=0;
趣味(p,5);
for(I=0;i5;I ) {
p[I]=I;//释放内存空间
}
0;
}
记忆受制于个人规定。
在应用malloc和其他内存应用程序之后,必须立即确认返回值是否为NULL。
考虑到序列的长度以避免越线操作,可以考虑灵活的序列。
内存应用和释放操作必须一致,这样可以避免泄露内存和多次释放。
如果一个函数必须释放内存,建议添加参数选项来明确调用者是否释放内存。
当free的参数为空时,它是一个非法参数,因此free立即被替换为NULL。
邮箱:明锐洲@ outlook.com
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。