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

时间:2015-10-19 02:01:47

标签: c

当我运行这段代码时,它会一直运行,直到我在main函数中找到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]);
    }
}

2 个答案:

答案 0 :(得分:1)

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

当您致电VectorRead()时,您正在传递指针值。在该函数中,您将 local V设置为对malloc()的调用的返回值。该本地V无法返回给调用者。

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

答案 1 :(得分:1)

调用Vector时,您的本地VVectorRead()未被修改。请尝试在您的函数中接受Vector **

void VectorRead(Vector **V)

并相应地修改功能。

或者,既然你的函数没有返回值,并且@EOF在注释中指出,那么获取参数可能更好,只需返回{{1} }:

Vector *