【发布时间】:2019-10-12 19:27:34
【问题描述】:
我试图 malloc 一个二维数组,但它 gdb 在第 8 行给了我分段错误。 if (A[i+x][j+y]!=A[i][j ].
顺便说一句:这个程序应该打印出输入矩阵的最大平方子矩阵的维数,使得它的所有数字都是相等的矩阵,使得它的所有数字都相等。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int same_surrounding(int **A, int i, int j, int size){
for (int x=0; x<size; x++){
for (int y=0; y<size; y++){
if (A[i+x][j+y]!=A[i][j])
return 0;
}
}
return 1;
}
int main(){
int n, i, j, sub, max_sub;
int **A;
scanf("%d", &n);
A=malloc(sizeof*A*n);
for (i=0; i<n; i++){
A[i]=malloc(sizeof**A*n);
}
for (i=0; i<n; i++){
for (j=0; j<n; j++){
scanf("%d", &A[i][j]);
}
}
for (i=0; i<n; i++){
for (j=0; j<n; j++){
sub=1;
while (sub<n&&same_surrounding(A, i, j, sub)){
if (sub>max_sub)
max_sub=sub;
sub++;
}
}
}
printf("%d", max_sub);
for (i=0; i<n; i++){
free(A[i]);
}
free(A);
return 0;
}
【问题讨论】:
-
same_surrounding超出了数组的范围。不知道你想在那里做什么。 -
谢谢。我改变了它,但它仍然给我分段错误(核心转储)。 (见后编辑)
标签: c memory-management