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


#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

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

  • 帮你找了个相似的问题, 你可以看下: 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);
    }

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