2016-03-24 101 views
-1

我不知道問題出在哪裏,但最新的指針(矢量)有一些麻煩。 第一個值沒問題(V[0]+T[0])S[1]它總是0,第三個值是隨機的。[C編程]矢量與指針

#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; 
} 
+0

你需要在這裏提出一個問題,在suma_vectori功能

分配內存至U! – mwm314

回答

1

您的suma_vectori及其使用不正確。

  • 指針Usuma_vectori未初始化,執行任務造成未定義行爲
  • 分配*S= suma_vectori(n,X,Y)具有超越S

初始元素沒有影響要解決此問題,更改suma_vectori返回int* ,在函數內部移動結果malloc,刪除mallocS,並指定Ssuma_vectori調用的結果:

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); 
+0

suma_vectori()應該做什麼?爲什麼有第三個參數是從未使用的?正如它寫的,它所做的就是克隆第二個參數。 – FredK

+0

爲什麼寫*(U + i)而不是更可讀的U [i]? – FredK

+0

這是大學的作業。 –

0

你,因爲它是撿的垃圾值