我能够以良好的方式声明两个矩阵A和B.
但是,当使用memcpy(从A复制B)时,B给出了0的数组。
我该怎么办?我的代码是否正确使用memcpy?
return (MainActivity) getActivity();
}
答案 0 :(得分:3)
您在初始化MatrixA
之前复制了内容。并且您还访问了索引超出范围(r+1
评估11
,其超出范围)导致 UB 。这样做 -
for(i=0;i<r;i++) // i starts from 0
{
for (j =0; j < c; j++) // j from 0
{
MatrixA[i][j]=j;
printf("A[%d][%d]= %d\t",i,j,MatrixA[i][j]);
}
printf("\n");
}
memcpy(MatrixB,MatrixA,c * sizeof(*MatrixA)); // copy after setting MatrixA
for(i=0;i<r;i++) // similarly indexing starts with 0
{
for (j =0; j < c; j++)
{
printf("B[%d][%d]= %d\t",i,j,MatrixB[i][j]);
}
printf("\n");
}
答案 1 :(得分:-2)
我的代码使用memcpy是否正确?
不,你的代码错了,但那不是memcpy
问题。你只是错误地做C数组。
int r = 10, c = 10, i, j;
int (*MatrixA)[r];
MatrixA=malloc(c * sizeof(*MatrixA));
好的,MatrixA
现在是指向10个元素的整数数组的指针吗?因此编译器保留内存为10个整数;但是,在malloc
行中,用一个指向内存区域的指针覆盖它,该内存区域是单个整数的十倍。代码分析工具会告诉您已经构建了内存泄漏。
这些错误在整个代码中都会继续存在;你必须使用malloc
来理解静态分配的C数组和动态分配之间的区别。