我目前正在编写一个简单的代码,应该将两个矩阵相互相乘,但当我试图创建大小超过4 × 4的矩阵时,我遇到了SIGSEV。
Matrix* allocate_matrix(size_t N) {
int i, j;
size_t MSIZE;
Matrix* matrix = malloc(sizeof(int*) * (N * SIZE_MULT));
MSIZE = N * SIZE_MULT;
if (matrix == NULL) {
perror("Error on malloc matrix");
exit(2);
}
for (i = 0; i < MSIZE; i++) {
matrix[i] = malloc(sizeof(int) * MSIZE);
if (matrix[i] == NULL) {
perror("Error on malloc matrix[i]");
for (j = 0; j < i; j++) {
free(matrix[j]);
}
free(matrix);
exit(2);
}
}
#if DEBUG
printf("Matrix allocated");
#endif
return matrix;
}
字符串
这是我分配内存的方式矩阵类型定义为int**
void fill_matrix(Matrix* m, size_t N) {
size_t x;
size_t y;
size_t MSIZE;
MSIZE = N * SIZE_MULT;
for (y = 0; y < MSIZE; y++) {
for (x = 0; x < MSIZE; x++) {
m[y][x] = rand() % INT_LIMIT;
#if DEBUG
/*printf("Generated int: %d on [%ld][%ld]\n\n", m[y][x], y, x);*/
#endif
}
}
printf("Matrix filled");
return;
}
型
这是插入数字到矩阵中的函数。
为一个愚蠢的问题而嘲笑别人,但我真的不知道怎么了。
代码在其中一个上运行得很好,例如,我成功地创建了一个10乘10的矩阵,但第二个矩阵一出现就崩溃了。伙计们,我需要一些提示。
1条答案
按热度按时间ulydmbyx1#
1.不要在typedef后面隐藏指针
***
pointer usually indicates erratic, bad code1.使用参数传递所有大小。避免奇怪的定义所有全局变量。
1.你可以使用数组指针
1.在
sizeof
中使用对象而不是类型1.为循环控制变量(以及所有其他变量)使用有意义的名称。
举例说明:
字符串
https://godbolt.org/z/q6nffGrYx的