【问题标题】:sigsegv error in aggregate method聚合方法中的 sigsegv 错误
【发布时间】:2013-06-10 20:30:47
【问题描述】:

这是我的代码:

#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)

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

【问题讨论】:

    标签: c++ pointers dereference segmentation-fault


    【解决方案1】:

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

    所以当你说: sizeof (toFindAvgOf)

    这将返回 12(假设系统上的 int 为 4 字节),从而导致 avgOf 函数中的索引超出范围。

    获取数组的长度:

    sizeof(toFindAvgOf) / sizeof(int)
    

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      相关资源
      最近更新 更多