我的代码有问题,但我不知道为什么会出现分段错误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指针做这个。
答案 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;
我希望你现在能看到这一点。