ghblk 2023-05-31 04:09 采纳率: 85.7%
浏览 35

关于子函数动态分配内存的问题


#include<stdio.h>
#include<stdlib.h>
int* fun(int *a) {
    int *c = (int*)malloc(2 * sizeof(int));
    for (int i = 0; i < 5; i++) {
        c[i] = a[i];
    }
    return c;
}
int main() {
    int a[5] = {1, 2, 3, 4, 5}, *b;
    b = fun(a);
    for (int i = 0; i < 5; i++) {
        printf("%d ", b[i]);
    }
    return 0;
}

我只动态分配了8个字节,应该是只能存2个int的,应该只能返回出2个元素,输出的结果应该是1 2。可是子函数却完整的把数组返回回来了。

img

  • 写回答

2条回答 默认 最新

  • 这一次有糖 2023-05-31 04:20
    关注

    你这里Fun函数内部不是使用了5个元素的循环吗?修改下条件I<2,还有你这里怎么会输出01呢,前8个字节是12

    评论 编辑记录
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-31 06:24
    关注
    • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7584195
    • 这篇博客你也可以参考下:写几个函数: 1.输入5个职工的姓名和职工号 2.按职工号由小到大进行排序,姓名也随之排序 3.要求输入职工号,用折半查找法进行查找,主函数输入。
    • 除此之外, 这篇博客: 一些零碎代码中的 输入字符串,调用函数取出字符串中最长的单词并存入另一个字符串。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • (有待思考)#define _CRT_SECURE_NO_WARNINGS
      #include
      #include
      #includeusing namespace std;
      void index(char* s1, char* s2)
      {
      int len ,max = 0;
      char temp[50];
      while (*s1)
      {
      while (*s1 == ’ ’ && *s1 != ‘\0’) s1++;//过滤空格;

      len = 0;
      while (*s1 != ' ' && *s1 != '\0')
      {    
          *(temp + len) = *s1;//不能用*temp=*s1,why?
          len++;
          s1++;
      }
      
      *(temp + len) = '\0';//注意这种方式。
      if (len > max)
      {
          max = len;
          strcpy(s2, temp);
      }
      
      if (*s1 == '\0') break;
      

      }}
      int main()
      {
      char s1[50],s2[50];cin.get(s1,50); index(s1, s2);
      ​ cout << “s2:” << s2;
      }用队列的方法输出杨辉三角:#include
      using namespace std;
      const int maxsize = 100;
      typedef struct {
      int Q[maxsize];//存放数据
      int front, rear;
      }sequeue;
      sequeue qu;
      void setkong(sequeue& qq)
      {
      qq.front = 0;
      qq.rear = 0;
      }//置队空
      void rudui(sequeue& qq, int x)
      {
      if (qq.front == (qq.rear + 1) % maxsize)
      cout << “overflow\n”;
      else
      {
      qq.Q[qq.rear] = x;
      qq.rear = (qq.rear + 1) % maxsize;
      }
      }
      void chudui(sequeue &qq, int& x)
      {
      if (qq.front == qq.rear)
      {
      cout << “underflow\n”;
      }
      else
      {
      x = qq.Q[qq.front];
      qq.front = (qq.front + 1) % maxsize;
      }
      }
      void getfront(sequeue qq, int &x)//读取队头元素
      {
      if (qq.front == qq.rear)
      {
      cout << “error!\n”;
      }

      else
      {
      x = qq.Q[qq.front];
      }
      }
      int empty(sequeue qq)//判断队列是否为空
      {
      if (qq.front == qq.rear)
      return 1;
      else
      return 0;
      }
      void yanghui(int n,sequeue qu)
      {
      int i, j,s,t;
      setkong(qu);
      rudui(qu, 1); rudui(qu, 1);
      cout << endl;
      cout.width(4); cout << 1;
      cout.width(4); cout << 1<<endl;
      for (i = 2; i <= n; i++)//生成并输出杨辉三角第i~n行的数据
      {
      rudui(qu, 1);
      cout.width(4); cout << 1;
      chudui(qu, s);
      for (j = 2; j <= i; j++)//处理第i行中间的各数据
      {
      chudui(qu, t);
      rudui(qu, s + t);
      cout.width(4); cout << s + t;
      s = t;

          }
          rudui(qu, 1);
          cout.width(4); cout << 1<<endl;
        
      }
      cout << endl;
      


      }
      int main()
      {
      int m;
      cin >> m;
      yanghui(m, qu);
      }

    • 您还可以看一下 李月喜老师的企业微信开发自建内部应用开发篇课程中的 开发文档如何阅读,如何寻求帮助,如何找到同行小节, 巩固相关知识点

    展开全部

    评论
编辑
预览

报告相同问题?

问题事件

  • 修改了问题 5月31日
  • 创建了问题 5月31日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部