gpt4 book ai didi

无法理解为什么 c 中的 malloc 函数会如下所述执行操作?

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:51 25 4
gpt4 key购买 nike

当我编写以下代码时,我得到了奇怪的答案。

#include<stdio.h>
#include<stdlib.h>
main()
{
int *p=malloc(1);
if(p==0)
printf("memory not assigned\n");
else
{
printf("memory assigned\n");
printf("enter an int\t");
scanf("%d",p);
printf("\n You entered number %d",*p);
printf("\nIt has been stored at-%p",p);
}
}

我认为 malloc 将参数作为字节数。所以在这里我输入了 1 个字节并且我知道在我的机器上 int 需要 4 个字节用于存储(通过 sizeof())但是代码仍然没有显示错误并且我可以输入一个int 值。即使我输入 3333333 它也不会提示。如果我使用 malloc() 而不是 malloc(1) gcc 提示 malloc 的参数太少但仍然给出相同的结果。我无法理解这种行为。有人会澄清吗

我通过 virtual box 在 gcc 上运行它。

最佳答案

如您所说,如果您这样做:

int *p=malloc(1);

只会分配 1 个字节。由于 int 大于 1 个字节,它会溢出分配的内存并给你未定义的行为。如果你这样做:

int *p=malloc(sizeof(int));

那么整数就有足够的空间了。

当您在分配的内存范围之外运行时,C 不会警告您,因此您需要仔细管理您的 malloc 大小。

关于无法理解为什么 c 中的 malloc 函数会如下所述执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15151291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com