gpt4 book ai didi

c++ - "Disallowed system call: SYS_socketcall"当我尝试解决 "sum the largest n integers in the array"编程挑战时

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:58:02 25 4
gpt4 key购买 nike

我正在想办法解决这个问题

Sum n largest integers in an array of integers where every integer is between 0 and 9

int SumNLargest(int* anData, int size, int n)

编程挑战提示,除了对数组拷贝进行排序并返回最后 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;
}

但是我得到了错误

Disallowed system call: SYS_socketcall

参见:http://codepad.org/UILgXDzQ

我的逻辑有问题吗?如果有,在哪里?另外,有没有我应该做的更优雅的线性解决方案?

(最后,我意识到我的解决方案假设 n >= size >= 1,但我认为典型的编程面试允许我做出这样的假设,这样我就不必浪费时间为意外输入编写一堆错误处理)

最佳答案

您的代码调用了未定义的行为

 for (int i = 0; i < size; ++i) 
++cntArr[anData[i]];

当你访问第十一个元素时(i = 10)因为cntArr只有10个元素。
诸如 AddressSanitizer 之类的内存检查器会立即向您指出这一点。

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

关于c++ - "Disallowed system call: SYS_socketcall"当我尝试解决 "sum the largest n integers in the array"编程挑战时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29799574/

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