diff --git a/src/flash/nor/avrf.c b/src/flash/nor/avrf.c
index 7cdab5193f70b2b55e94f5fb14e874050c62672a..8472d8362c00f5bb838559a89faa2ee512d809c1 100644
--- a/src/flash/nor/avrf.c
+++ b/src/flash/nor/avrf.c
@@ -324,6 +324,12 @@ static int avrf_probe(struct flash_bank *bank)
 
 	if (avr_info != NULL)
 	{
+		if (bank->sectors)
+		{
+			free(bank->sectors);
+			bank->sectors = NULL;
+		}
+
 		// chip found
 		bank->base = 0x00000000;
 		bank->size = (avr_info->flash_page_size * avr_info->flash_page_num);
diff --git a/src/flash/nor/pic32mx.c b/src/flash/nor/pic32mx.c
index 58009ae57bf39259c12df8b5a8056c70008186ae..2fe864d4f0fbf592d05b76164e28a3ad1a7b6cc7 100644
--- a/src/flash/nor/pic32mx.c
+++ b/src/flash/nor/pic32mx.c
@@ -560,6 +560,12 @@ static int pic32mx_probe(struct flash_bank *bank)
 
 	LOG_INFO("flash size = %" PRId32 "kbytes", num_pages / 1024);
 
+	if (bank->sectors)
+	{
+		free(bank->sectors);
+		bank->sectors = NULL;
+	}
+
 	/* calculate numbers of pages */
 	num_pages /= page_size;
 	bank->size = (num_pages * page_size);
diff --git a/src/flash/nor/stellaris.c b/src/flash/nor/stellaris.c
index 38374ffe50ad0ed3f61cd9639c01b9178d080fe4..f7e2e8d9df10079657a0ad36c070ee8fa5fe418b 100644
--- a/src/flash/nor/stellaris.c
+++ b/src/flash/nor/stellaris.c
@@ -1065,6 +1065,12 @@ static int stellaris_probe(struct flash_bank *bank)
 	if (retval != ERROR_OK)
 		return retval;
 
+	if (bank->sectors)
+	{
+		free(bank->sectors);
+		bank->sectors = NULL;
+	}
+
 	/* provide this for the benefit of the NOR flash framework */
 	bank->size = 1024 * stellaris_info->num_pages;
 	bank->num_sectors = stellaris_info->num_pages;
diff --git a/src/flash/nor/stm32x.c b/src/flash/nor/stm32x.c
index d11a8edc640b56c77b21965d92a7d70258029b30..8a3b83232c1d8806b5b3b8c4436b5a34bef76283 100644
--- a/src/flash/nor/stm32x.c
+++ b/src/flash/nor/stm32x.c
@@ -775,6 +775,12 @@ static int stm32x_probe(struct flash_bank *bank)
 	/* calculate numbers of pages */
 	num_pages /= (page_size / 1024);
 
+	if (bank->sectors)
+	{
+		free(bank->sectors);
+		bank->sectors = NULL;
+	}
+
 	bank->base = 0x08000000;
 	bank->size = (num_pages * page_size);
 	bank->num_sectors = num_pages;
diff --git a/src/flash/nor/tms470.c b/src/flash/nor/tms470.c
index c1681f1971ddc65f7be89be9e4e3b0fc6708bf80..343c43ed878f39557fa57b37c27b05dcc3a8096a 100644
--- a/src/flash/nor/tms470.c
+++ b/src/flash/nor/tms470.c
@@ -139,6 +139,12 @@ static int tms470_read_part_info(struct flash_bank *bank)
 	rom_flash = (device_ident_reg >> 10) & 1;
 	part_number = (device_ident_reg >> 3) & 0x7f;
 
+	if (bank->sectors)
+	{
+		free(bank->sectors);
+		bank->sectors = NULL;
+	}
+
 	/*
 	 * If the part number is known, determine if the flash bank is valid
 	 * based on the base address being within the known flash bank