Ich habe ein Problem in meinem Code, aber ich weiß nicht, warum ich die Segmentierungsfehler 11. Der Fehler in Zeile geschieht bekommenSegmentierungsfehler 11 aber warum?
#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;
}
Dies ist die wichtigste Methode. Der Fehler tritt nach (oder innerhalb) der for-Schleife auf. Der Zeiger wird in dieser C-Datei initialisiert:
#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;
}
Und das ist der headder:
#ifndef VectorMath_h
#define VectorMath_h
double distance(int pointA[3], int pointB[3], int *p_result);
#endif
Sorry für den langen Code, aber ich dachte, dass Sie den gesamten Code benötigen. Wie gesagt, ich weiß nicht, warum das passiert, also wird der Zeiger p_result in der anderen .c-Datei initialisiert und er zeigt auf den Anfang des Arrays.
BEARBEITEN: Ich sollte sagen, dass der Zweck von diesem ist, dass ich eine Funktion habe, die den Abstand zwischen 2 Punkten berechnet und den Abstand UND den Vektor zwischen den zwei Punkten zurückbringt. und deshalb mache ich das mit dem Zeiger p_result.
'p_result' wird nicht von Ihrer Routine geändert. –