[英]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.