-2

我在 C 函数方面遇到了一些麻烦。

这是功能:

int* CalcMeanPower(int Media[], int** MeanPowerArray, int righe, int colonne)
{
  int i=0, k=0;
  int ArrayPower[] = {0, 0, 0, 0};

  for (i=0; i<righe; i++)
  {
    for (k=0; k<colonne; k++)
    {
      ArrayPower[k] = ArrayPower[k] + MeanPowerArray[i][k]  ;
    }
  }

  for (k=0; k<colonne; k++)
  {
    Media[k] = (ArrayPower[k]/righe);
  }

  return Media;
}

这就是我从主函数调用函数的方式:

VettoreMedia = CalcMeanPower(VettoreMedia, RefMeanPower, num_mean, N);

,其中变量定义如下:

int* RefMeanPower[N];
int* VettoreMedia;
int N=4, num_mean=5;

当我尝试运行该程序时,它会在尝试执行以下操作时返回一个分段错误:

 for (k=0; k<colonne; k++)
  {
    Media[k] = (ArrayPower[k]/righe);
  }

你能解释一下我做错了什么吗?我在网上搜索过,但找不到答案。这个函数只是我的 C 程序的一小部分,但我确信它在这个循环中出错了!

请帮忙..

4

3 回答 3

1

在传递给函数之前,您尚未初始化 VetorreMedia。由于未初始化,Media 也指向未知位置,因此分段错误。VetorreMedia 应该有一些默认值。

于 2013-02-18T16:54:24.473 回答
0

如果您在调试器中运行它,您将看到您的段错误发生的位置并能够从那里解决它。

谷歌gdb cheatsheet开始。

于 2013-02-18T16:55:36.333 回答
0

您需要为变量/数组保留内存。

RefMeanPower只是一个普通的未初始化指针数组。并且VettoreMedia只是一个普通的未初始化指针。

for(int i = 0; i < N; ++i)
  RefMeanPower[i] = malloc(sizeof(int) * num_mean);

// don't forget to free after usage
for(int i = 0; i < N; ++i)
  free(RefMeanPower[i]);

你在哪里得到RefMeanPower[N][num_mean]如此交换ki作为索引或Nnum_mean创建时。

VettoreMedia你可以做

VettoreMedia = malloc(sizeof(int) * N);

// don't forget to free after usage
free(VettoreMedia);

或者

int VettoreMedia[N];
// frees automatically when leaving scope
于 2013-02-18T16:55:59.013 回答