0
이 프로그램을 실행할 때 세그먼트 오류가 계속 발생합니다. 나는 (명령 줄에 삽입 된) 파일을 읽고 각 파일의 x 및 y 좌표를 POINTS (readPoints라는 함수를 사용하는)라고하는 동적으로 할당 된 메모리 구조체에 할당하려고합니다. 이 구조체에 저장된 후에는 함수 호출에 전달하여 x 및 y 값을 곱한 다음 x 및 y 곱하기에 추가합니다. 누군가 내가 잘못 갔다는 것을 나에게 설명해 주시겠습니까! 나는 포인터에서 위대하지 않다. 미리 감사드립니다.분할 오류 11, 포인터를 사용하여 문제를 해결하고
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
float xcord;
float ycord;
}POINTS;
int readPoints(char* file, int numofpoints);
int calc(POINTS* points, int numofpoints);
int main(int argc, char* argv[])
{
int numoffiles;
FILE* file;
int result, i;
numoffiles = argc;
POINTS* pointer;
int numofpoints;
if(numoffiles == 1)
{
printf("Please enter a file\n");
}
for(i=1; i<numoffiles; i++)
{
file = fopen(argv[i], "r");
fscanf(file, "%d", &numofpoints);
pointer = readPoints(file, numofpoints);
if(pointer == NULL)
{
printf("Error return from readPoints function");
}
result = calc(&pointer[i], numoffiles);
printf("%12f", result);
free(pointer);
}
}
int readPoints(char* file,int numofpoints)
{
int i, j;
POINTS* Pointstructs;
Pointstructs = (POINTS*)malloc((numofpoints)*sizeof(POINTS));
if(file == NULL)
{
printf("Error transferring file into readPoints\n");
}
for(i=0; i<numofpoints; i++)
{
fscanf(*file, "%f, %f", &Pointstructs[i].xcord, &Pointstructs[i].ycord);
printf("%f, %f", Pointstructs[i].xcord, Pointstructs[i].ycord);
}
return Pointstructs;
}
int calc(POINTS* points, int numofpoints)
{
int i=0, j=0;
int answer;
while(i<numofpoints && j<numofpoints)
{
answer += points[i].xcord * points[j].ycord;
i++;
j++;
}
return answer;
}
'exit'를 호출하고 프로그램 실행을 중단해야하는 곳이 여러 곳 있습니다. – babon
저는 항상 [Valgrind] (https://www.valgrind.org)를 사용하여 segfaults를 얻는 이유를 찾습니다. '-g'로 컴파일하고'valgrind'로 실행하십시오. 행운을 빕니다! –
64 비트 시스템에서이 작업을 수행하고 있습니까? 'int'는 보통 32 비트이지만 포인터는 64 비트입니다. 이제 포인터의 상위 32 비트를 잘라서 함수에서 그 값을 반환하면 어떻게되는지 다시 생각해보십시오. 경고를 켜십시오 (컴파일러가 경고를 외치는 경우). –