c - 如何在C中复制函数内的结构?内存复制

标签 c arrays dynamic struct memcpy

我是学生,很抱歉问了一个愚蠢的问题,如果确实如此的话。尚未完成 C 语言模块:c

因此 core.c 文件中的 memcpy(); 无法正常工作。或者也许它只是以我不需要的方式工作。该问题有助于找到以下任务的解决方案:

这个想法是有一个函数multiply();,它接受nMatrix [4x4]和nVector [4]指针。它假设使用 buffer(tempVector) 来获取相乘的结果,然后将整个结构 memcpynVector

但相反,美丽的乘法 vector 结果却从内存中给出了垃圾。 另外,在超出范围之前,我释放了 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();
  }
...
...
}

最佳答案

通过在上传之前尝试最后一个想法,已经找到了解决方案。因此,当您调用memcpy时,它只是复制 vector 的数组指针,该指针将在下一条指令vectorFree();中释放。因此,为了防止我们将实际数组从 tempVector 复制到 nVector 结构!*

代码解决方案:

memcpy(nVector->vector,tempVector.vector,vecLength*sizeof(double));

我仍然上传它,因为我花了 45 分钟来写这个问题。我希望它能帮助将来的任何人:)

保持冷静,祝你有美好的一天:D

关于c - 如何在C中复制函数内的结构?内存复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34033618/

相关文章:

php - 如何在 php 文件中编写 css 类?

jsf - 动态 UI 包含在 Primefaces 对话框中

c - ps命令linux vs unix在c程序中的不同行为

c - 通过函数传递链表头作为C中的地址

c - 尝试 printf 进度指示器时 c 循环中的奇怪怪癖

javascript - Angular 8 多重滤镜

javascript - 单击按钮时使用数组元素更改标签内容

c++ - 为什么 electric fence/Valgrind 无法捕获此缓冲区溢出问题?

javascript - 如何查找 Javascript 数组中最高元素的出现次数?

c# - Silverlight 中的动态 TextBlock 字体大小