level 11
小白问个指针问题:
new (或malloc)可以分配内存;返回地址;
那delete(或free)有什么用;释放内存??不太理解;
int *i=new int;
delete i;
i的值没变(值为分配的地址)
那他到底干了什么;
我还能对 *i (地址指向的内容)进行操作么;还有如何判断 i 有没有被delete
.....各位大神解释下
2016年01月03日 06点01分
3
分配内存,就是把这个内存给你用,释放内存,就是把使用权收回。你可以试试对已经释放的内存地址写入操作,Segmentation Fault欢迎您
2016年01月03日 07点01分
@李登淳 那可以重载delete 使释放了内存的指针值为NULL来判断是否被释放了么
2016年01月03日 08点01分
@李登淳 delete 后 指针的值仍为原来的地址
2016年01月03日 09点01分
回复 李登淳 :#include<stdio.h> int main(){ int *i=new int; printf("%p_%d\n",i,*i); delete i; printf("%p_%d\n",i,*i); }
2016年01月03日 09点01分
level 3
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{ void sort(char *p[],int n);
char str[5][10];
char *p[5];
int i;
printf("输出5个字符串:");
for(i=0;i<5;i++)
{scanf("%s",&str[i]);
p[i]=str[i];
}
sort(p,4);
for(i=0;i<5;i++)
printf("%s\n",str[i]);
}
void sort(char *p[],int n)
{ int i,j;
char *t;
for(j=0;j<n;j++)
for(i=0;i<n-j;i++)
if(strcmp(p[i],p[i+1])<0)
t=p[i+1];
p[i+1]=p[i];
p[i]=t;
}
楼主,为什么调用的函数没有用呢?
2016年01月04日 07点01分
8
level 9
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
void sort(char *p[],int n);
char str[5][10];
char *p[5];
int i;
printf("输出5个字符串:");
for(i=0;i<5;i++)
{
scanf("%s",&str[i]);
p[i]=str[i];
}
sort(p,4);
for(i=0;i<5;i++)
printf("%s\n",str[i]);
}
void sort(char *p[],int n)
{ int i,j;
char *t;
for(j=0;j<n;j++)
for(i=0;i<n-j;i++)
if(strcmp(p[i],p[i+1])>0)
t=p[i+1];
p[i+1]=p[i];
p[i]=t;
printf("%s\n",*p);
}
//楼主,为什么调用的函数没有用呢?
//代码问题,根本没转换到
2016年01月04日 09点01分
9
level 7
#include<stdio.h>
int main()
{
int n,y,Y,r,R,a;
scanf("%6d%4d%1d%1d%1d%1d%d",&a,&n,&y,&Y,&r,&R);
printf("%-6d%5d%d%5d%d%6d",n,y,Y,r,R,n+y*10+Y+r*10+R);
return 0;
}
为什么会出现分段错误!
2016年01月10日 07点01分
14