gpt4 book ai didi

c - 关于在 C 中为整数分配内存的一般问题

转载 作者:行者123 更新时间:2023-11-30 16:17:08 25 4
gpt4 key购买 nike

我目前正在学习 C 中的动态内存分配,并且对特定概念有困难。为了对特定整数使用 malloc,我需要将先前声明的整数放入该空间内。

下面是我输入的代码。

void example(int ab)
{
int* intPtr=(int*)malloc(sizeof(int));
*intPtr = &ab;
}

我不想运行程序或任何东西。我只是想看看我对一些基本内存分配的想法是否正确。

最佳答案

有几个问题,首先,没有必要对 malloc() 的结果进行类型转换,因为它是由编译器隐式完成的。 Read Do I cast the result of malloc? 。这个

int* intPtr = malloc(sizeof(int)); /* or even malloc(sizeof(*intPtr)); is better */

没问题。

其次,这个

*intPtr = &ab; /* *intPtr means value at allocated dynamic address, you should assign the value not address of ab*/

是错误的,因为*intPtr是动态地址处的值,编译器应该警告你

main.c:7:9: warning: incompatible pointer to integer conversion assigning to 'int' from 'int *'; remove & [-Wint-conversion]

如果您使用以下标志进行编译,例如

gcc -Wall -Wextra -Werror -Wpedantic test.c

应该是

*intPtr = ab;

此外,您没有释放动态分配的内存,这会导致内存泄漏。使用完毕后,通过调用 free() 释放动态分配的内存。

旁注,如果您打算这样做

intPtr = &ab; /* Before this statement intPtr was pointing dynamic memory(heap), but now that gets overwritten with stack allocated space */

那么您将使用堆栈创建的内存(即局部变量的地址)覆盖动态内存,在这种情况下,您将丢失动态内存,因为没有任何内容指向先前分配的动态地址。

关于c - 关于在 C 中为整数分配内存的一般问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339026/

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