首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将指针**p (malloc(sizeof(int*)转换为指针*p

将指针**p (malloc(sizeof(int*)转换为指针*p
EN

Stack Overflow用户
提问于 2022-09-03 09:05:41
回答 2查看 36关注 0票数 1
代码语言:javascript
代码运行次数:0
运行
复制
#include<stdio.h>
#include<stdlib.h>
int main() {
    int *n = malloc(sizeof(int*));//line 1
    scanf("%d",n);
    printf("%d",*n);
}

我不知道这里发生了什么事。第1行(在上面的片段中)是否意味着n现在只是一个指向int的指针?我们已经开始使用分配给指针的内存作为变量本身?指向指针的指针是否转换为int?

EN

Stack Overflow用户

发布于 2022-09-03 09:34:59

malloc对类型一无所知,它只关心大小。

正确的咒语是

代码语言:javascript
代码运行次数:0
运行
复制
T *t = malloc(sizeof(*t)); // or
T *t = malloc(sizeof(T));

如果您将任何其他表达式传递给malloc,并且它碰巧具有正确的值,那么您就会得到幸运,而没有什么不好的事情发生。但这让人困惑。不要混淆代码的读者。

如果传递给malloc的值大于正确的值,则只会浪费内存。如果它少了,你就会冒着不确定的行为的风险。

实现定义了sizeof(int)是否与sizeof(int*)相同、大于还是小于sizeof(int*),所以不要这样做。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73590964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档