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

时间:2019-05-28 09:27:46

标签: c memory malloc

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

以下是我作为代码添加的内容。

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

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

1 个答案:

答案 0 :(得分:0)

几乎没有问题,首先不需要转换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:警告:指向整数的指针不兼容         从“ int”分配给“ int *”的转换; 删除&         [-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 */

然后,您使用堆栈创建的内存(即局部变量的地址)覆盖动态内存,在这种情况下,由于没有内容指向先前分配的动态地址,您正在丢失动态内存。