分段故障11但为什么?

时间:2017-07-20 18:46:50

标签: c segmentation-fault

我的代码有问题,但我不知道为什么会出现分段错误11.错误发生在行

#include <stdio.h>
#include "VectorMath.h"

int getUserInput() {
  int userinput;

  printf("1) Calculating new vector and distance \n");
  printf("0) Exit \n");

  scanf("%d", &userinput);

  return userinput;
}

void getUserPoint(int vector[3]) {
  int userinput;
  char coordinate[] = {'x', 'y', 'z'};
  int counter = 0;

  for(counter = 0; counter < 3; counter++){
      printf("%c", coordinate[counter]);
      scanf("%d", &userinput);
      vector[counter] = userinput;
  }
}


int main() {
  int vectorA[3];
  int vectorB[3];

  int input = 0;
  int counter = 0;

  int *p_result;

  double result;

  _Bool run = 1;

  while(run) {
      input = getUserInput();

      if (input == 1){
          printf("Enter point A (x,y,z) \n");
          getUserPoint(vectorA);
          printf("Enter point B (x,y,z) \n");
          getUserPoint(vectorB);
      }else if(input == 0) {
          break;
      }

      result = distance(vectorA, vectorB, p_result);

      printf("The distance between the points A and B is %.2lf \n", result);
      printf("The vector between the point A and B is \n");
      for (counter = 0; counter < 3; counter++){
          printf("%d \n", p_result[counter]);
      }
  }

  return 0;
}

这是主要的Methode。错误发生在for循环之后(或内部)。指针在此.c文件中初始化:

#include "VectorMath.h"
#include <math.h>

double distance(int pointA[3], int pointB[3], int *p_result) {
  double distance_result;
  int vectorbtw[3];
  int counter = 0;

  for(counter = 0; counter < 3; counter++) {
      vectorbtw[counter] = pointB[counter] - pointA[counter];
  }

  p_result = vectorbtw;

  for(counter = 0; counter < 3; counter++) {
      distance_result += pow(vectorbtw[counter], 2);
  }

  distance_result = sqrt(distance_result);

  return distance_result;
}

这是负责人:

#ifndef VectorMath_h
#define VectorMath_h
  double distance(int pointA[3], int pointB[3], int *p_result);
#endif  

很抱歉长码但我认为你需要整个代码。 正如我所说,我不知道为什么会这样,所以p_result指针在另一个.c文件中被初始化,他指向数组的开头。

编辑:我应该说这个的目的是我有一个函数来计算2点之间的距离并返回距离和两点之间的向量。这就是为什么我用p_result指针做这个。

2 个答案:

答案 0 :(得分:0)

您不会在任何地方初始化int *p_result;。你传递了一个指向你的距离例程的单位指针的值。该本地副本设置为指向本地数组,但在该函数调用之后,主函数中的p_result仍然未初始化。

答案 1 :(得分:0)

p_result指针需要指向有效内存,例如数组,因此不是

int *p_result;

使用

int p_result[3];

并保持其余部分不变,是否有效?

您的distance()函数假定p_result已经是一个有效的指针,但为了确保它需要指向某处。事实上,它并没有指向任何地方,因为它从未初始化,你也可以这样做

int result[3];
int *p_result;

p_result = result;

我希望你现在能看到这一点。