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