加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C malloc仅为int * 分配了8个字节

发布时间:2020-12-16 10:40:50 所属栏目:百科 来源:网络整理
导读:参见英文答案 size of a pointer allocated by malloc ????????????????????????????????????4个 我正在尝试在函数中创建一个指向6元素int的指针,以便稍后返回它,所以为此目的我正在使用malloc,但它似乎并没有像我预期的那样行事.这是代码: int j = 0;for (
参见英文答案 > size of a pointer allocated by malloc ????????????????????????????????????4个
我正在尝试在函数中创建一个指向6元素int的指针,以便稍后返回它,所以为此目的我正在使用malloc,但它似乎并没有像我预期的那样行事.这是代码:

int j = 0;
for (;j < 5; j++) {
    int * intBig = malloc(j * sizeof(int));
    printf("sizeof intBig - %ldn",sizeof(intBig));
}

在每次迭代时打印与sizeof(intBig)相同的8个字节.虽然我期待一系列的4,8,12,16.在这种情况下我缺少什么?

解决方法

这是因为你打印的是int *的大小.这样的指针总是具有相同的大小. sizeof是一个编译器构造.它不能知道仅在运行时发生的事情,例如动态内存分配.它会是什么样的

int intBig[100];

然后你会得到数组的大小(以字节为单位),因为编译器知道它有多大.但是sizeof运算符的结果总是一个编译时常量1,所以你没有办法产生任何其他东西.

此外,你有一个内存泄漏因为你没有再释放你的记忆.

1可变长度数组(VLA)是一个例外,但这里没有使用它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读