ghblk 2023-05-31 12: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条回答 默认 最新

  • Watch the clown 2023-05-31 12:20
    关注

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

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 5月31日
  • 创建了问题 5月31日