C语言 在这种情况下,是否将相同的内存地址复制到main函数?

u5i3ibmn  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(55)

一般来说,我是编程的初学者,我关心内存分配。在这个函数中,我为结构中的字符串动态分配内存,然后将这个结构传递给数组。
我相信这两个记忆位置是相同的,但我想和比我更有经验的人确认一下。
如果用户决定不添加项,我会释放内存,但一旦确认,结构体将被传递到数组,然后由于堆栈的工作方式,它将被“销毁”。然而,如果内存地址不同,我将拥有永远不会释放的内存,我知道这是不好的。

void addShopItem(ShopItem *shoppingList, int shopListIndex)
{
  ShopItem ListItem;
  char itemName[MAXSTR];

  // Asking the user for input
  printf("Item %d: ", shopListIndex + 1);
  fgets(itemName, MAXSTR, stdin);
  itemName[strlen(itemName) - 1] = '\0';

  // Some code goes here

  ListItem.name = malloc(strlen(itemName) + 1);

  if (ListItem.name == NULL)
  {
    fprintf(stderr, "Error. Memory not allocated");
    exit(1);
  }

  strcpy(ListItem.name, itemName);

  // This is the part that concerns me
  if (confirmItemToList(&ListItem) == false)
  {
    free(ListItem.name);
    return addShopItem(shoppingList, shopListIndex);
  }
  else
  {
    shoppingList[shopListIndex] = ListItem;
  }
  return;
}

// I was using this function to later free the memory in all the structs in the array
void freeMemoryAndReset(ShopItem *shoppingList)
{
  int i = 0;
  while (i < MAXITEMS && shoppingList[i].name != NULL)
  {
    free(shoppingList[i].name);
    shoppingList[i].amount = 0;
    i++;
  }
}

字符串

vlf7wbxs

vlf7wbxs1#

当你传递一个结构体时,它是通过值传递的,因此也被复制。它的所有成员也被复制。但是,如果其中一个是指针,那么复制的指针仍然保存相同的内存地址。

+----------+
| struct A |          +-----------+
| char *s ----------->| "Hello"   |
+----------+          +-----------+
                       ^
                      /
+-----------+        /
| copy of A |       /
| char *s ----------  
+-----------+

字符串

相关问题