c - BOOLEAN allocate_items(struct item * items, size_t howmany) 函数用于分配 struct item 数组

标签 c arrays struct malloc dynamic-memory-allocation

最近在学习C,在网上发现了一个问题。问题是:

What is the problem with this function in terms of memory allocation? What is a good solution? You may assume that a struct item type has been declared. The purpose of this function is to allocate an array of struct item, which you may assume has been declared prior to this function.

BOOLEAN allocate_items(struct item * items, size_t howmany)
{ 
   size_t count; 
   items = malloc(sizeof(struct item) * howmany); 

   if(!items) { 
      perror("failed to allocate memory"); 
      return FALSE; 
   }
   return TRUE;

}

所以,我认为第四行是错误的。应该是这样的:

items = malloc(sizeof(struct item));

而且第6行也是错误的。应该是这样的:

if(items == NULL){

正确吗?

最佳答案

首先,正如您提到的,第 4 行和第 6 行似乎都可以。

也就是说,这个函数的基本问题是,您将内存分配给变量的本地范围。这边走

  • 由于您没有返回指向已分配内存的指针,因此在函数返回后,将无法访问已分配的内存。
  • 如果不释放分配的内存,您将面临内存泄漏。

如果您必须为指针分配内存,则需要将该指针的地址传递给函数并分配内存。您也可以返回指针,但随后需要更改函数签名。

最后,arrays are not pointers and vice-versa 。它们有时可能看起来或行为相似,但它们并不相同。

关于c - BOOLEAN allocate_items(struct item * items, size_t howmany) 函数用于分配 struct item 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40276136/

相关文章:

c - fread into array of structs 段错误

c - 将 C 结构转换为另一个元素较少的结构是否安全?

c - 负数右移

c - 我的代码在循环中重复的次数超过要求

c++ - 在数组中存储一个大于 9 的数字

java - 使直方图和星形图输出不正确

java - 按行对矩阵进行排序并保留索引

c++ - 如何在 Mac OS X 上从命令行进行分析?

仅当包含 x.h 文件时才调用类似自由的函数

c - 指向二维结构数组 C 的指针