C:转置矩阵,分割错误
C: transposing matrix, segmentation fault
我在做教科书中的矩阵转置问题时遇到了一些问题,我是
从.
学习 C
当代码为 运行 时,它会输出大量任意数字,然后是 "Segmentation fault (core dumped)"。
看了其他类似问题的答案,大部分都涉及到pointers/flags,但是这本书还没有到那个阶段,所以没有它们应该可以解决问题。
问。编写一个函数 transposeMatrix,将一个 4x5 矩阵和一个 5x4 矩阵作为参数。让函数转置 4x5 矩阵并将结果存储在 5x4 矩阵中。也写一个主程序来测试功能。
#include <stdio.h>
void transposeMatrix (int matrix1[4][5], int matrix2[5][4])
{
int i, j;
for(i = 0; i < 4; ++i) {
for(i = 0; i < 5; ++i) {
matrix2[j][i] = matrix1[i][j];
}
}
for(i = 0; i < 5; ++i) {
for(j = 0; j < 4; ++i) {
printf("%i ", matrix2[i][j]);
}
printf("\n");
}
}
int main (void)
{
void transposeMatrix (int matrix1[4][5], int matrix2[5][4]);
int imatrix2[5][4];
int imatrix1[4][5] =
{
{5, 6, 7, 8, 9},
{1, 2, 3, 4, 5},
{5, 4, 3, 2, 1},
{9, 8, 7, 6, 5}
};
transposeMatrix(imatrix1, imatrix2);
return 0;
}
for(i = 0; i < 4; ++i) {
for(i = 0; i < 5; ++i) {
matrix2[j][i] = matrix1[i][j];
}
}
这里的内循环计数器应该是j但是你用了i,它也使
matrix2[j][i] = matrix1[i][j];
此语句使用 j 的未初始化值,这会导致未定义的行为
您只是在几个地方使用了错误的循环变量。在第一个循环中:
for(i = 0; i < 4; ++i) {
for(i = 0; i < 5; ++i) {
应该是:
for(i = 0; i < 4; ++i) {
for(j = 0; j < 5; ++j) {
(即在内部循环中将 i
更改为 j
。
此外,在第二个循环中,以下内容:
for(i = 0; i < 5; ++i) {
for(j = 0; j < 4; ++i) {
应该是:
for(i = 0; i < 5; ++i) {
for(j = 0; j < 4; ++j) {
(即在内部循环中增加 j
,而不是 i
。
我在做教科书中的矩阵转置问题时遇到了一些问题,我是 从.
学习 C当代码为 运行 时,它会输出大量任意数字,然后是 "Segmentation fault (core dumped)"。
看了其他类似问题的答案,大部分都涉及到pointers/flags,但是这本书还没有到那个阶段,所以没有它们应该可以解决问题。
问。编写一个函数 transposeMatrix,将一个 4x5 矩阵和一个 5x4 矩阵作为参数。让函数转置 4x5 矩阵并将结果存储在 5x4 矩阵中。也写一个主程序来测试功能。
#include <stdio.h>
void transposeMatrix (int matrix1[4][5], int matrix2[5][4])
{
int i, j;
for(i = 0; i < 4; ++i) {
for(i = 0; i < 5; ++i) {
matrix2[j][i] = matrix1[i][j];
}
}
for(i = 0; i < 5; ++i) {
for(j = 0; j < 4; ++i) {
printf("%i ", matrix2[i][j]);
}
printf("\n");
}
}
int main (void)
{
void transposeMatrix (int matrix1[4][5], int matrix2[5][4]);
int imatrix2[5][4];
int imatrix1[4][5] =
{
{5, 6, 7, 8, 9},
{1, 2, 3, 4, 5},
{5, 4, 3, 2, 1},
{9, 8, 7, 6, 5}
};
transposeMatrix(imatrix1, imatrix2);
return 0;
}
for(i = 0; i < 4; ++i) {
for(i = 0; i < 5; ++i) {
matrix2[j][i] = matrix1[i][j];
}
}
这里的内循环计数器应该是j但是你用了i,它也使
matrix2[j][i] = matrix1[i][j];
此语句使用 j 的未初始化值,这会导致未定义的行为
您只是在几个地方使用了错误的循环变量。在第一个循环中:
for(i = 0; i < 4; ++i) {
for(i = 0; i < 5; ++i) {
应该是:
for(i = 0; i < 4; ++i) {
for(j = 0; j < 5; ++j) {
(即在内部循环中将 i
更改为 j
。
此外,在第二个循环中,以下内容:
for(i = 0; i < 5; ++i) {
for(j = 0; j < 4; ++i) {
应该是:
for(i = 0; i < 5; ++i) {
for(j = 0; j < 4; ++j) {
(即在内部循环中增加 j
,而不是 i
。