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

u5i3ibmn  于 2024-01-06  发布在  其他
关注(0)|答案(1)|浏览(254)

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

  1. void addShopItem(ShopItem *shoppingList, int shopListIndex)
  2. {
  3. ShopItem ListItem;
  4. char itemName[MAXSTR];
  5. // Asking the user for input
  6. printf("Item %d: ", shopListIndex + 1);
  7. fgets(itemName, MAXSTR, stdin);
  8. itemName[strlen(itemName) - 1] = '\0';
  9. // Some code goes here
  10. ListItem.name = malloc(strlen(itemName) + 1);
  11. if (ListItem.name == NULL)
  12. {
  13. fprintf(stderr, "Error. Memory not allocated");
  14. exit(1);
  15. }
  16. strcpy(ListItem.name, itemName);
  17. // This is the part that concerns me
  18. if (confirmItemToList(&ListItem) == false)
  19. {
  20. free(ListItem.name);
  21. return addShopItem(shoppingList, shopListIndex);
  22. }
  23. else
  24. {
  25. shoppingList[shopListIndex] = ListItem;
  26. }
  27. return;
  28. }
  29. // I was using this function to later free the memory in all the structs in the array
  30. void freeMemoryAndReset(ShopItem *shoppingList)
  31. {
  32. int i = 0;
  33. while (i < MAXITEMS && shoppingList[i].name != NULL)
  34. {
  35. free(shoppingList[i].name);
  36. shoppingList[i].amount = 0;
  37. i++;
  38. }
  39. }

字符串

vlf7wbxs

vlf7wbxs1#

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

  1. +----------+
  2. | struct A | +-----------+
  3. | char *s ----------->| "Hello" |
  4. +----------+ +-----------+
  5. ^
  6. /
  7. +-----------+ /
  8. | copy of A | /
  9. | char *s ----------
  10. +-----------+

字符串

相关问题