gpt4 book ai didi

c++ - 段错误(核心已转储)C++ 错误

转载 作者:太空宇宙 更新时间:2023-11-04 16:20:25 26 4
gpt4 key购买 nike

我收到以下代码的“段错误(核心已转储)”错误:

#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]; 行将抛出编译时错误。

当然,您应该优先考虑内置函数和容器 :)

关于c++ - 段错误(核心已转储)C++ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17416890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com