C:从另一个文件运行函数时出现分段错误

C:从另一个文件运行函数时出现分段错误,c,C,当我运行这段代码时,它一直工作到我的主函数中的printf语句,这就是我得到分段错误的时候。因此,它的运行方式类似于“输入需要的数字”3“输入数组中的数字”1 2 3数组[0]=1数组[1]=2数组[2]=3分段错误。你们能告诉我为什么我会遇到这个错误以及如何修复它吗?多谢各位 //pathfinder.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "Vect

当我运行这段代码时,它一直工作到我的主函数中的printf语句,这就是我得到分段错误的时候。因此,它的运行方式类似于“输入需要的数字”3“输入数组中的数字”1 2 3数组[0]=1数组[1]=2数组[2]=3分段错误。你们能告诉我为什么我会遇到这个错误以及如何修复它吗?多谢各位

//pathfinder.c    
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Vector.h"

int main()
{
    Vector *V;
    VectorRead(V);
    printf("%d", V->item[0]);
    return 0;
}

//Vector.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct{
int *item;
int size;
} Vector;

void VectorRead(Vector *V) ;

void VectorRead(Vector *V)
{
    int N;
    printf("Enter how many numbers you want?\n");
    scanf("%d", &N);
    V = (Vector *)malloc(sizeof(Vector *) * N);
    V->size = N;
    V->item = (int *)malloc(sizeof(int *) * V->size);
    printf("Enter the numbers that you want in your array\n");
    int i = 0;
    while(i < V->size && scanf("%d", &(V->item[i++])) == 1);
    int j;
    for(j = 0; j< V->size; j++){
            printf("array[%d]=%d\n", j, V->item[j]);
    }
}
//pathfinder.c
#包括
#包括
#包括
#包括“Vector.h”
int main()
{
向量*V;
向量头(V);
printf(“%d”,V->item[0]);
返回0;
}
//向量h
#包括
#包括
#包括
#包括
类型定义结构{
国际*项目;
整数大小;
}载体;
无效向量头(向量*V);
无效向量头(向量*V)
{
int N;
printf(“输入所需数字?\n”);
scanf(“%d”和“&N”);
V=(向量*)malloc(向量*)*N;
V->size=N;
V->item=(int*)malloc(sizeof(int*)*V->size);
printf(“在数组中输入所需的数字\n”);
int i=0;
而(isize&&scanf(“%d”),&(V->item[i++])==1);
int j;
对于(j=0;jsize;j++){
printf(“数组[%d]=%d\n”,j,V->item[j]);
}
}

此错误与您的代码位于不同的文件中无关

调用
vectoread()
时,传递的是指针值。在该函数中,您将本地
V
设置为调用
malloc()
的返回值。本地
V
无法返回调用方


您需要做一些事情来将新分配的
V
值返回给调用者。将函数更改为返回一个
向量*
(而不是将一个作为参数)将是一个很好的方法。

调用
VectorRead()
时,不会修改本地
向量
V
。尝试在函数中接受
向量**

void VectorRead(Vector **V)
并相应地修改函数

或者,由于您的函数没有返回值,正如@EOF在注释中指出的,最好不要使用参数,只返回
向量*

Vector *VectorRead(void)

C是传递值。更改函数中的参数不会影响调用者中的参数……但如果将参数的地址作为指针传递,则可以更改此指针的目标值。@peterh:……或者您可以做明智的事情,并
返回
指针。@EOF顺便说一句,C的漂亮之处在于它的肮脏性。:-)是的,C主要是按值传递的,但数组是按地址传递的。C中没有规则,没有例外:-)好吧,它是以BCPL后的下一步命名的,但实际上它缩写为“我”\u C_haos:-)您在两个malloc调用中malloc的字节数都是错误的。这可以通过使用模式
p=malloc(N*sizeof*p)来避免为什么每个人都想让人们使用多个间接寻址?只需返回该死的指针!这是一种选择。然而,在某些情况下,它可能更安全,而不是简单地返回,或者如果需要不同的返回值,等等。鉴于OP的函数是
void
,将其更改为返回
向量*
,似乎并不十分困难;会更好,因为这是一个原型。