当我运行这段代码时,它会一直运行,直到我在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]);
}
}
答案 0 :(得分:1)
此错误与您的代码位于不同文件中无关。
当您致电VectorRead()
时,您正在传递指针值。在该函数中,您将 local V
设置为对malloc()
的调用的返回值。该本地V
无法返回给调用者。
您需要做一些事情来将新分配的V
值返回给调用者。更改函数以返回Vector *
(而不是将其作为参数)将是一个很好的方法。
答案 1 :(得分:1)
调用Vector
时,您的本地V
,VectorRead()
未被修改。请尝试在您的函数中接受Vector **
:
void VectorRead(Vector **V)
并相应地修改功能。
或者,既然你的函数没有返回值,并且@EOF在注释中指出,那么不获取参数可能更好,只需返回{{1} }:
Vector *