分段错误:分配矩阵时为 11
Segmentation Fault: 11 when allocating a matrix
我在使用分配的矩阵时出现分段错误,我不明白为什么。此代码当前有效,但不依赖于计算机
#include <stdlib.h>
void allocMatrix(int ***M, int n, int m) {
*M = (int**)malloc(n * sizeof(int));
int i = 0;
while(i<n) {
(*M)[i] = malloc(m * sizeof(int));
i++;
}
}
int main(void) {
int **mat;
int R, C;
R = 15;
C = 10;
allocMatrix(&mat, R, C);
int i,j;
for(i = 0; i < R; i++) {
for( j = 0; j < C; j++) {
*(*(mat+i)+j) = j+i*R;
}
}
#ifdef WIN32
system("pause");
#endif
}
我在 Xcode 中得到 segmentation fault: 11 or EXC BAD ACCESS
。如前所述,只发生在某些计算机上
sizeof(int)
不保证等于sizeof(int*)
,所以你分配的内存块很可能太小了。写入未分配的内存是未定义的行为,有时它可能会按预期工作,有时则不会。
我在使用分配的矩阵时出现分段错误,我不明白为什么。此代码当前有效,但不依赖于计算机
#include <stdlib.h>
void allocMatrix(int ***M, int n, int m) {
*M = (int**)malloc(n * sizeof(int));
int i = 0;
while(i<n) {
(*M)[i] = malloc(m * sizeof(int));
i++;
}
}
int main(void) {
int **mat;
int R, C;
R = 15;
C = 10;
allocMatrix(&mat, R, C);
int i,j;
for(i = 0; i < R; i++) {
for( j = 0; j < C; j++) {
*(*(mat+i)+j) = j+i*R;
}
}
#ifdef WIN32
system("pause");
#endif
}
我在 Xcode 中得到 segmentation fault: 11 or EXC BAD ACCESS
。如前所述,只发生在某些计算机上
sizeof(int)
不保证等于sizeof(int*)
,所以你分配的内存块很可能太小了。写入未分配的内存是未定义的行为,有时它可能会按预期工作,有时则不会。