我得到了一些奇怪的指针相关的错误,我不知道怎么会发生,如何解决它。因为我是新的C任何良好的编码实践建议也是赞赏。
typedef struct matrix {
int n;
int m;
int **data;
int *inverses;
} Matrix;
Matrix m_new(int n, int m, int *inverses) {
int **data = malloc(n);
for (int k = 0; k < n; k++) {
int *row = malloc(m + 1);
*row++ = k;
*(data+k) = row;
// print_arr(*data); - introduced for debugging purposes
}
Matrix mat = {
.n = n,
.m = m,
.data = data,
.inverses = inverses,
};
return mat;
}
void print_arr(int *arr) {
int len = *(arr-1);
printf("len: %d\n", len);
}
在这里,我将使用这个矩阵对整数模进行高斯消去,这就是为什么我使用了inverses数组,并且我使用了int **
,这样我可以在以后轻松地交换行。对于用int *
表示的数组,我使用第-1项来存储数组的长度。我遇到了一些奇怪的错误,所以我写了一个小函数来获取一个数组的长度(print_arr),并检查data中的第一个数组。
镜头:0
镜头:0
镜头:0
镜头:0
镜头:-1219680380
我觉得很奇怪,因为在上一次迭代中似乎有些东西在改变,但我不知道为什么。
1条答案
按热度按时间1hdlvixo1#
分配的内存太小。您需要将元素的数量乘以元素的大小来计算要分配的内存大小:
使用当前的代码,您会溢出太小的缓冲区并导致未定义的行为。