Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 分段故障(堆芯转储)C++;错误_C++ - Fatal编程技术网

C++ 分段故障(堆芯转储)C++;错误

C++ 分段故障(堆芯转储)C++;错误,c++,C++,我用以下代码得到“分段错误(堆芯转储)”错误: #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 namespac

我用以下代码得到“分段错误(堆芯转储)”错误:

#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];
} 
#包括
#包括
模板
T maxn(T*元素,int n);
模板常量字符*最大值(常量字符*元素[],整数);
int main(){
使用名称空间std;
//使用模板
int num[6]={2,3,4,5,6,22};
双num2[4]={16.6,10.5,2.3,1.1};
int larg=maxn(num,6);
双larg2=maxn(num2,4);

是否返回元素超出范围:

return elements[i];
应该是:

return elements[longest];
我可以建议在for循环中声明
I

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

for(int i=0;i返回元素超出范围:

return elements[i];
应该是:

return elements[longest];
我可以建议在for循环中声明
I

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

for(int i=0;iYes!我刚刚意识到谢谢!@LucasMezaliram很高兴它有帮助:)是的!我刚刚意识到谢谢!@LucasMezaliram很高兴它有帮助:)如果您使用
std::string
而不是C样式的字符串,您将省去很多麻烦。请记住,您的
maxn
函数已经作为
std::max_元素为您编写了。再次选择StackOverflow优先于gdb。为什么人们不会学习使用gdb?@paddy,因为gdb没有按钮”他问"这是一个从C++入门的练习,我需要使用C风格的字符串,创建自己的函数,而不是使用内置的.BTW,我从来没有听说过GDB。如果使用<代码> STD::String < /Cl>而不是C风格字符串,你会省去很多麻烦。记住,你的<代码> Max N/COD>函数已经为你编写了。
std::max_element
。再次选择StackOverflow优先于gdb。为什么人们不学习使用gdb?@paddy,因为gdb没有“提问”按钮这是一个C++ C++入门的练习,我需要使用C风格的字符串,创建自己的函数,而不是使用内置的BTW,我从来没有听说过GDB。