簡體   English   中英

分段錯誤(核心轉儲)C ++錯誤

[英]Segmentation fault (core dumped) C++ error

我收到以下代碼,出現“分段錯誤(核心已轉儲)”錯誤:

#include <iostream>
#include <cstring>

template <class T>
T maxn(T* elements, int n);

template <> const char* maxn <const char*>(const char* elements[], int num);

int main(){
    using namespace std;

    //Using template
    int num[6] = {2, 3, 4, 5, 6, 22};
    double num2[4] = {16.6, 10.5, 2.3, 1.1};

    int larg = maxn(num, 6);
    double larg2 = maxn(num2, 4);
    cout << larg << endl << larg2 << endl;

    //Using specialization
    const char* pps[5] = {"Hello", "There", "I", "am", "me"};
    const char* largest = maxn(pps, 5);
    cout << largest << endl; 
    return 0;


}    

//return largest element in an array of T of n elements
template <class T>
T maxn(T* elements, int n){
    T largest = 0;
    for (int i=0; i<n; i++)
        largest = elements[i] > largest ? elements[i] : largest;
    return largest;
}    

//Returns address that points to the largest string
template <> const char* maxn <const char*>(const char* elements[], int num){
    int longest = 0;
    int i =0;
    for (i=0; i<num; i++)
        if (strlen(elements[i]) > strlen(elements[longest]))
            longest = i;
    return elements[i];
} 

我收到了“警告:從字符串常量到'char *的棄用轉換”錯誤,但是后來我將一些char *數組和函數參數更改為const char *,而我擺脫了這一點。 現在,代碼進行編譯,我得到以下輸出:

22

16.6

分段故障(核心已轉儲)

前兩行是正確的,但我不明白第三行會發生什么。 請幫忙,謝謝。

您返回超出范圍的元素:

return elements[i];

應該:

return elements[longest];

我可以建議在for循環中聲明i

for (int i=0; i<num; i++)
//   ^^^^^^^

然后行return elements[i]; 將拋出編譯時錯誤。

並且,當然,您應該優先考慮內置函數和容器:)

暫無
暫無

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

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