将代码进行修改,将原来main函数的功能以另一函数f来实现,并将f开辟空间返回给main,在main 中访问这些空间内存数据。代码如下 #include <iostream> using namespace std; double * f( ) {double* s; s=new double[10]; if(!s) { cout<<"allocation failure\n"; return 0; } for(int i=0;i<10;i++) s[i]=100.00+2*i; for(int i=0;i<10;i++) cout<<s[i]<<" "; delete []s; //语句1 return s;} int main() { double* s; s=f(); //delete []s; 语句2 //delete s; 语句3 cout<<s[1]<<s[4];//语句4 } 提示:这段代码请在codeblock与VC环境运行中分别运行。 提问1:请分析这样设计有什么问题?提出你的理由。 提问2:如果将注释的delete语句2,Debug 过程又会有什么问题?为什么? 提问3:如果将语句1去掉、再加上语句2,可不可以呢,会出现什么情况? 提问4:如果将把语句2换成语句3,可不可以呢,会出现什么情况?
时间: 2023-05-27 11:02:05 浏览: 97
可以将原来的main函数中的代码抽象成一个函数f,并在其中为需要使用的变量动态地分配内存空间。然后通过将f的返回值赋值给main函数中定义的变量,实现在main中访问这些空间内存数据的功能。
代码示例:
#include <stdio.h>
#include <stdlib.h>
/* 定义函数f */
int *f(int n) {
int *arr;
int i;
/* 在堆中动态分配n个整型空间 */
arr = (int *)malloc(n * sizeof(int));
/* 初始化数组 */
for (i = 0; i < n; i++) {
arr[i] = i + 1;
}
return arr; /* 返回分配好的空间的首地址 */
}
int main() {
int n = 5;
int *p, i;
/* 调用函数f,并将返回值赋值给p */
p = f(n);
/* 访问分配好的空间内存数据 */
for (i = 0; i < n; i++) {
printf("%d ", p[i]);
}
/* 释放分配的内存空间 */
free(p);
return 0;
}
阅读全文