[C编程]矢量&指针

时间:2016-03-24 15:17:16

标签: c arrays pointers

我不知道问题在哪里,但最新的指针(矢量)有一些麻烦。 第一个值没关系(V[0]+T[0])S[1]它总是0,第三个值是随机的。

#include <stdio.h>
#include <stdlib.h>

int citire_vector(int n, int *V);
void afisare_vector(int n, int *V);
int produs_scalar(int n, int *V, int *T);
int suma_vectori(int n, int *V, int *T);

int main(void)
{
    int n, *X, *Y, ps, *S;
    printf("n = ");
    scanf("%d",&n);

    X = (int*) malloc(n*sizeof(int));
    Y = (int*) malloc(n*sizeof(int));

    citire_vector(n,X);
    citire_vector(n,Y);
    afisare_vector(n,X);
    afisare_vector(n,Y);

    ps = produs_scalar(n,X,Y);
    printf("Produsul scalar = %d\n",ps);

    S = (int*) malloc(n*sizeof(int));
    *S= suma_vectori(n,X,Y);
    afisare_vector(n,S);

}

int citire_vector(int n, int *V)
{
    int i;

    for(i=0;i<n;i++)
        scanf("%d",V+i);

    return *V;
}

void afisare_vector(int n, int *V)
{
    int i;
    printf("Valorile vectorului sunt:\n");
    for(i=0;i<n;i++)
        printf("%d ",*(V+i));
    printf("\n");
}

int produs_scalar(int n, int *V, int *T)
{
    int i, ps = 0;
    for(i = 0;i<n;i++)
        ps += (*(V+i))*(*(T+i));
    return ps;
}

int suma_vectori(int n, int *V, int *T)
{
    int i, *U;
    for(i=0;i<n;i++)
    {
        *(U+i )= *(V+i);
    }
    return *U;
}

2 个答案:

答案 0 :(得分:1)

您的suma_vectori及其使用不正确。

  • U内的指针suma_vectori未初始化,在分配时导致未定义的行为
  • 作业*S= suma_vectori(n,X,Y)S
  • 的初始元素外无效

要解决此问题,请更改suma_vectori以返回int*,在结果中移动malloc结果,移除malloc S,然后分配S suma_vectori来电的结果{/ 1}}:

int *suma_vectori(int n, int *V, int *T); // forward declaration

int *suma_vectori(int n, int *V, int *T) { // Implementation
    int *U = malloc(n*sizeof(int)); // do not cast malloc
    for(int i=0;i<n;i++) {
        U[i] = V[i] + T[i];
    }
    return U;
}

// call
S= suma_vectori(n,X,Y);

// Don't forget to free malloc-ed memory
free(X);
free(Y);
free(S);

答案 1 :(得分:0)

你必须在suma_vectori函数

中为U分配内存

因为它正在挑选垃圾值