簡體   English   中英

返回數組時出現分段錯誤

[英]Segmentation fault when returning an array

我試圖解決這個代碼 我們必須將一個數組作為 output 返回給 function。 我必須在其中編碼的 function 是這樣給出的。

 int *findTwoElement(int *arr, int n) {
        // code here
    }

當我聲明我的ans數組時,如下表所示並返回它,我遇到了segmentation fault

int ans[2];
ans[0]=b;
ans[1]=a;
        
return ans; 

但是當我聲明我的ans數組時,就像下面給出的表格並返回它,它工作正常

int *ans=new int(2);
   
ans[0]=b;
ans[1]=a;
    
return ans;

編輯-> 如果第一個代碼返回segmentation fault ,那么這段代碼(如下所示)如何正常工作?

#include <iostream>
using namespace std;
 
int* fun()
{
    int arr[100];
 
    /* Some operations on arr[] */
    arr[0] = 10;
    arr[1] = 20;
 
    return arr;
}
 
int main()
{
    int* ptr = fun();
    cout << ptr[0] << " " << ptr[1];
    return 0;
}

我沒有得到我做錯了什么。 任何幫助將不勝感激。 謝謝你。 :)

如果int ans[2]; 在函數內部聲明,它是一個具有自動存儲期限的數組,從function返回時它的生命結束,所以你不能在返回后使用指向它的指針。

還要注意int *ans=new int(2); 不是分配 2 元素數組,而是分配具有初始值2的單個int 它應該是int *ans=new int[2]; 分配一個數組。

最后一個代碼可能運行良好,因為並非每個無效指針都會自動導致分段錯誤。 它可能仍然指向屬於您的程序的 memory 的區域,因此您可以對其進行讀寫。 只是不能保證它在任何時候都不會被覆蓋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM