4. 深入理解内存管理专题中的堆区内存使用和释放规则,在此基础上,找出下面代码错误的原因,并给出1-2个解决方案(至少有一个方案使用malloc/free或new/delete[])。
#include
void main(void) { char *str = NULL; str = GetString(); cout<< str << endl; }
错误原因及你的理解:
修正方案1:
修正方案2:
5. 编程求一个3×3矩阵转置(即行列互换)并输出矩阵中最大值及位置。(要求用二维数组double num[3][3]存储矩阵,用行指针变量dopuble (*p)[3]访问二维数组)
#include
scanf(\ }
p=num; for(i=0,a=0,b=0;i<3;i++) { for(j=0;j<3;j++) { if(p[i][j]>p[a][b]) { a=i; b=j; } } } printf(\最大值为%lf\\n所在的位置为第%d行第%d列\ printf(\转置矩阵为:\\n\ for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(\ printf(\ } }
运行结果
6. 输入2整数a和b,设计一个函数void calculate(int *psum,int *psub)计算a和b的平方和与平方差,main函数调用calculate函数并输出2个计算结果。(拔高:设计函数void calculate2(int &refsum,int &refsub)计算a和b的平方和与平方差)
#include
void calculate(int *psum,int *psub); void main() { int a,b,*p1,*p2; printf(\请输入两个数:\\n\ scanf(\ p1=&a; p2=&b; calculate(p1,p2); printf(\两数的平方和为%d\\n两数的平方差为%d\\n\}
void calculate(int *psum,int *psub) {
int m,n; m=*psum; n=*psub; *psum=m*m+n*n; *psub=m*m-n*n; }
运行结果:
三、 上机中的感受、困惑及教学建议
对malloc free的用法还是不是很熟练,对多级指针的掌握有待加强。