gpt4 book ai didi

c++ - 聚合方法中的 sigsegv 错误

转载 作者:行者123 更新时间:2023-11-30 04:17:33 26 4
gpt4 key购买 nike

这是我的代码:

#include <cstdlib>
#include <stdio.h>
#define NUM_READINGS 3
int* readingsTotal;
int* readingsAverage;
int readingsIndex;

using namespace std;

void avgOf(int* toFindAvgOf, int size) {
int i;
for (i = 0; i < size; i++) {
// Add reading to total for each component.
readingsTotal[i] += toFindAvgOf[i];
// Once method has been iterated through n (NUM_READINGS) times:
if (readingsIndex == NUM_READINGS - 1) {
// Set the arithmetic mean.
readingsAverage[i] = readingsTotal[i] / NUM_READINGS;
// Reset the total.
readingsTotal[i] = 0;
}
}
readingsIndex++;
}

int iterate(int findAvgOf) {
int toFindAvgOf[] = {findAvgOf, 20, 30};
avgOf(toFindAvgOf, sizeof (toFindAvgOf));
return readingsAverage[0];
}

int main(int argc, char** argv) {

readingsTotal = (int []){0, 0, 0};
readingsAverage = (int []){0, 0, 0};
int i;
for (i = 0; i < 3; i++) {
int smthd = iterate(12 + i * 2);
printf("%d\n", smthd);
}
return 0;
}

当我在 netbeans c/c++ 中运行它时,它构建时出现错误,但是当它执行时失败并打印:

RUN FAILED (exit value 1, total time: 86ms)

当我进入 Debug模式时,它也会立即失败并给出 SIGSEGV 错误。通过在线阅读,我猜我取消引用指针的方式存在一些问题。但我不知道它到底在哪里失败了。我是 C++ 的新手,所以任何帮助都会很棒!

最佳答案

在 C 中,sizeof 函数返回对象的大小以字节为单位

所以当你说:sizeof(toFindAvgOf)

这将返回 12(假设您系统上的 int 是 4 字节),从而导致 avgOf 函数中出现索引越界情况。

获取数组的长度:

sizeof(toFindAvgOf) / sizeof(int)

关于c++ - 聚合方法中的 sigsegv 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17032285/

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