[英]Problem with the function returning a pointer c++
我調用 function 當我想讀取結果時返回一個指針兩次,第一個被第二個覆蓋
int *ip1Array = new int[4];
int *ip2Array = new int[4];
ip1Array = ipSplit(4);
ip2Array = ipSplit(2);
int *ipSplit(int ip)
{
static int ipTab[4];
for (int i = 0; i <= ip; i++) {
ipTab[i] = ip
}
return ipTab;
}
這只是一段非常簡化的代碼。 問題是第一個 function 調用的結果被第二個調用覆蓋。 如何解決?
它沒有被覆蓋,兩個指針都指向同一個東西:
static int ipTab[4];
int *ip1Array = new int[4];
這定義了一個指針。 您已將其初始化為指向動態數組。
ip1Array = ipSplit(4);
這個賦值會覆蓋之前的指針值。 由於先前的值是指向動態數組的唯一指針,因此不再指向它,並且不能再刪除它。 這稱為 memory 泄漏。 不要這樣做。
static int ipTab[4];
static
意味着該變量在 function 的所有調用中都是相同的。 對 function 的每次調用都將返回指向同一數組(的第一個元素)的指針。
ip1Array = ipSplit(4); ip2Array = ipSplit(2);
這兩個 arrays 都指向由 function 返回的相同數組的(第一個元素)。 並且兩個動態 arrays 已經泄露。
ip1Array = ipSplit(4);
您使用參數 4 調用 function。
static int ipTab[4];
該數組有 4 個元素。
for (int i = 0; i <= ip; i++) {
您可以通過索引 0、1、2、3、4 訪問。 數一數。 您可以訪問 5 個不同的索引。 您訪問數組的邊界之外,程序的行為是未定義的。 不要這樣做。
如何解決?
static
。 由於 arrays 的大小恆定且很小,您可以使用std::array
:
auto
ipSplit(int ip)
{
assert(ip <= 4);
std::array<int, 5> ipTab{};
for (int i = 0; i <= ip; i++) {
ipTab[i] = ip
}
return ipTab;
}
// usage
auto ip1Array = ipSplit(4);
auto ip2Array = ipSplit(2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.