#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?
发布于 2022-09-03 09:34:59
malloc
对类型一无所知,它只关心大小。
正确的咒语是
T *t = malloc(sizeof(*t)); // or
T *t = malloc(sizeof(T));
如果您将任何其他表达式传递给malloc
,并且它碰巧具有正确的值,那么您就会得到幸运,而没有什么不好的事情发生。但这让人困惑。不要混淆代码的读者。
如果传递给malloc
的值大于正确的值,则只会浪费内存。如果它少了,你就会冒着不确定的行为的风险。
实现定义了sizeof(int)
是否与sizeof(int*)
相同、大于还是小于sizeof(int*)
,所以不要这样做。
https://stackoverflow.com/questions/73590964
复制相似问题