Неверное значение из массива, переданного функцией - PullRequest
0 голосов
/ 12 сентября 2018

Итак, я прочитал некоторые другие темы, которые охватывают это.Они отмечают, что это dynmaic, поэтому вам нужно выделить эту память.Проблема, когда я выделяю это пространство и помещаю его в мои значения, заключается в том, что теперь моя память не сохраняется в массиве.Мне было интересно, ошибаюсь ли я, или есть какое-то понятие, которое я неправильно понимаю в отношении массивов и c.

//.c file
int *multiply(int m, int n, int *matrix, int *vector,int sizeV){
    int *final = (int*) malloc(sizeof(int)*n);
    int i = 0;
    int j = 0;
    int row = 0;
    int column = 0;

    if(n != sizeV){return NULL;};

    for(i = 0;i < sizeV;i++)
    {
            while(column < n)
            {
                    final[i] += matrix[row] * vector[column];
                    row++;
                    column++;
            }
            column = 0;
            j = 0;
    }
    for(i = 0;i < sizeV;i++)
    {
            printf("\nfinal[%d] = %d\n",i,final[i]);
    }
    return final;
}

googletest //.googletest file

TEST(MultiplyTest, Correct_Result_3x3){
int matrix[] = {1,2,3,4,5,6,7,8,9};
int vector[] = {1,2,3};
int correct[] = {14, 32, 50};   
int *result = multiply(3,3,(int *)matrix, vector,3);

ASSERT_NE(-1, *(result));

for(int i = 0; i < 3; i++)
    EXPECT_EQ(correct[i], *(&result[i]));   
}

TEST(MultiplyTest, Correct_Result_2x2){
    int matrix[] = {1,2,4,5};
    int vector[] = {1,2,};
    int correct[] = {5, 14};    
    int *result = multiply(2,2,(int *)matrix, vector,2);

     ASSERT_NE(-1, *(result));

    for(int i = 0; i < 2; i++)                  
        EXPECT_EQ(correct[i], *(result + i));   
    }

output // output [output [RUN] MultiplyTest.Correct_Result_3x3

final[0] = -1656784906

 final[1] = 32620

 final[2] = -1656784870
 src/Matrix-vector_unittests.cpp:15: Failure
 Expected equality of these values:
 correct[i]
 Which is: 14
 *(&result[i])
 Which is: -1656784906
src/Matrix-vector_unittests.cpp:15: Failure
Expected equality of these values:
 correct[i]
 Which is: 32
 *(&result[i])
 Which is: 32620
src/Matrix-vector_unittests.cpp:15: Failure
Expected equality of these values:
  correct[i]
  Which is: 50
 *(&result[i])
 Which is: -1656784870
[  FAILED  ] MultiplyTest.Correct_Result_3x3 (0 ms)
[ RUN      ] MultiplyTest.Correct_Result_2x2

final[0] = -1656784931

final[1] = 32602

src/Matrix-vector_unittests.cpp:27: Failure
Expected equality of these values:
 correct[i]
 Which is: 5
 *(result + i)
Which is: -1656784931
src/Matrix-vector_unittests.cpp:27: Failure

Ожидаемое равенство этих значений:

Опять же, я не уверен, что я делаю неправильно.Я не освобождаю память в настоящее время.Я, в основном, пытаюсь передать эти правильные значения прямо сейчас и испытываю трудности с этим.

...