一般来说,我是编程的初学者,我关心内存分配。在这个函数中,我为结构中的字符串动态分配内存,然后将这个结构传递给数组。
我相信这两个记忆位置是相同的,但我想和比我更有经验的人确认一下。
如果用户决定不添加项,我会释放内存,但一旦确认,结构体将被传递到数组,然后由于堆栈的工作方式,它将被“销毁”。然而,如果内存地址不同,我将拥有永远不会释放的内存,我知道这是不好的。
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++;
}
}
字符串
1条答案
按热度按时间vlf7wbxs1#
当你传递一个结构体时,它是通过值传递的,因此也被复制。它的所有成员也被复制。但是,如果其中一个是指针,那么复制的指针仍然保存相同的内存地址。
字符串