我是学生,对于一个愚蠢的问题我很抱歉,如果实际上是这样的话。还没有完成C lang模块:c
因此 core.c 文件中的memcpy();
不能正常工作。或者它可能只是以我不需要的方式工作。问题是帮助找到以下任务的解决方案:
我们的想法是拥有一个接受 nMatrix [4x4]和 nVector [4]指针的函数multiply();
。它假设使缓冲区(tempVector)获得乘法结果,然后memcpy
整个结构为 nVector 。
但是相反,美丽的乘法矢量结果会从内存中产生垃圾。 在退出范围之前,我释放 tempVector 数组以防止任何错误的堆内存管理。不幸的是, nVector 数组仍依赖于来自 tempVector 的复制内存。
我很感激任何建议! :d
这就是问题代码部分 - core.c
#include "core.h"
#include "init.h"
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>
#define vecLength 4
typedef struct Vector {
double * vector;
int N;
} Vector;
typedef struct Matrix {
double ** matrix;
int nRow;
int nCol;
} Matrix;
...
...
void multiply(Vector* nVector, Matrix* nMatrix)
{
Vector tempVector;
vectorInit(&tempVector);
for(int i = 0; i < nMatrix->nRow; i++)
for(int j = 0; j < nMatrix->nCol; j++)
tempVector.vector[i]+= nMatrix->matrix[i][j]*nVector->vector[j];
memcpy(nVector,&tempVector,sizeof(Vector));
vectorFree(&tempVector);
}
main.c中
int main(){
...
...
Vector* v_Test;
Matrix* m_Test;
//Test structures memory allocation
v_Test = (Vector*) malloc(sizeof(Vector));
m_Test = (Matrix*) malloc(sizeof(Matrix));
//Initialization of vector in structure
vectorInit(v_Test);
for(int i = 0; i < v_Test->N; i++)
v_Test->vector[i]=i+1;
//Print vector
vectorPrint(v_Test);
getch();
//Initialization of matrix in structure
matrixInit(m_Test);
for(int i=0; i<m_Test->nCol; i++)
for(int j=0; j<m_Test->nCol;j++)
m_Test->matrix[i][j]=m_Test->nRow*i+j;
//Print matrix
matrixPrint(m_Test);
getch();
multiply(v_Test,m_Test);
vectorPrint(v_Test);
getch();
vectorFree(v_Test);
getch();
matrixFree(m_Test);
getch();
}
...
...
}
答案 0 :(得分:1)
在上传之前尝试了最后一个想法已经找到了解决方案。因此,当您调用memcpy
时,它只会复制将在下一条指令vectorFree();
中释放的向量的数组指针。因此,为了防止我们只是将实际数组从 tempVector 复制到 nVector 结构!*
代码中的解决方案:
的memcpy(nVector-&GT;矢量,tempVector.vector,vecLength *的sizeof(双));
我仍然上传它,因为我花了45分钟写这个问题。我希望它能在未来帮助任何人:)
保持冷静的家伙,度过美好的一天:D