C++ &引用;不允许的系统调用:SYS_socketcall";当我试图解决这个问题时;对数组中最大的n个整数求和;编程挑战

C++ &引用;不允许的系统调用:SYS_socketcall";当我试图解决这个问题时;对数组中最大的n个整数求和;编程挑战,c++,algorithm,C++,Algorithm,我正试图想出解决这个问题的办法 整数数组中n个最大整数之和,其中每个整数都是 在0到9之间 int SumNLargest(int* anData, int size, int n) 编程挑战提示(programming challenge prompt),这是一种不同于显而易见的排序数组副本并返回最后9个元素之和的解决方案 #include <iostream> int SumNLargest(int* anData, int size, int n) { // Sum n l

我正试图想出解决这个问题的办法

整数数组中n个最大整数之和,其中每个整数都是 在0到9之间

int SumNLargest(int* anData, int size, int n)
编程挑战提示(programming challenge prompt),这是一种不同于显而易见的排序数组副本并返回最后9个元素之和的解决方案

#include <iostream>

int SumNLargest(int* anData, int size, int n)
{
// Sum n largest integers in an array of integers where every integer is between 0 and 9
    int cntArr [] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    for (int i = 0; i < size; ++i) ++cntArr[anData[i]];
    int sum = 0;
    for (int i = size - 1; i >= 0; --i)
    {
        sum += (n - cntArr[i]) >= 0 ?  cntArr[i] * i : n * i;
        --n;
        if (n <= 0) break;
    }   
    return sum;
}


int main()
{
    int myArray [] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 11, 12, 15};
    std::cout << SumNLargest(myArray, sizeof(myArray)/sizeof(int), 2);
    return 0;
}
#包括
int SumNLargest(int*anData,int size,int n)
{
//整数数组中n个最大整数之和,其中每个整数介于0和9之间
int cntArr[]={0,0,0,0,0,0,0,0,0,0};
对于(int i=0;i=0;--i)
{
sum+=(n-cntArr[i])>=0?cntArr[i]*i:n*i;
--n;

如果(n=size>=1
,但我认为典型的编程面试允许我做出这样的假设,这样我就不必浪费时间为意外输入编写大量错误处理)

您的代码在

 for (int i = 0; i < size; ++i) 
        ++cntArr[anData[i]]; 
for(int i=0;i
当您访问第十一个元素(
i=10
)时,因为
cntArr
只有10个元素。
内存检查器(如AddressSanitizer)会立即指示您


您并不是真正调用系统调用来创建新套接字,但是,由于未定义的行为,任何情况都可能发生。

该错误与您的程序无关。它似乎是一个内部错误(?)。此外,您还违反了数组包含0到9之间的值的要求,并且由于您访问cntArr,因此会出现未定义的行为[anData[i]]其中anData[i]大于9,即大于cndArr的大小