1.下面程序运行结果是?
#include <stdio.h>
void func(int b[])
{
int j;
for(j=0;j<4;j++)
b[j]=j;
}
int main()
{
int a[4] = {5,6,7,8},i;
func(a);
for(i=0;i<4;i++)
printf("%2d",a[i]);
return 0;
}
0 1 2 3(因为子函数的形参传的是数组的地址)
下面函数有什么问题?
void DoSomeThing(...)
{
char *p;
...
p = malloc(1024);// 分配 1K 的空间
if(NULL==p)
return;
...
p=readlloc(p,2048);// 空间不够,重新分配到 2K
if(NULL==p)
return;
}
1、p = malloc(1024);应该写成: p = (char *) malloc(1024 * sizeof(char));
2、没有释放 p 的空间,造成内存泄漏。
关于动态内存
- 总是检查动态内存是否成功后再引用该指针!
- 在分配struct空间是总是使用sizeof 分配内存时宁滥勿缺(别忘了加一)
- 总是Free由malloc()函数返回的指针
- 按照ANSI C标准Free函数是没有返回值的
- 错误处理时不要忘了其它已经分配空间的释放