问题信息: 编译器:mingw32-gcc.exe(tdm-1)4.7.1 CLI:gcc z:\ ES16 \ main.c -o main.exe 代码测试:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 3
void print_matrix(int** _mtx);
int main()
{
int i,j;
srand(time(NULL));
int **mtx;
mtx = (int **)malloc(sizeof(int*)*DIM);
for (i=0;i<DIM;i++)
{
mtx[i] = (int *)malloc(sizeof(int*)*DIM);
}
for(i=0;i<DIM*DIM;i++)
{
for(j=0;j<DIM;j++)
{
*((*(mtx)) + (i * DIM + j))= (int)(rand() % 10 + 1);
}
}
print_matrix(mtx);
free(mtx);
return 0;
}
void print_matrix(int** _mtx)
{
int i,j;
for(i=0;i<DIM;i++)
{
for(j=0;j<DIM;j++)
{
printf("%d ",*((*(_mtx)) + (i * DIM + j)));
}
printf("\n");
}
}
下面我们有一些观点让我们认为问题是Windows而不是编译器:
尽管上面的所有内容都无法启动 windows deafult shell。
有时程序会在没有打印矩阵的情况下崩溃,有时在打印部分矩阵后会崩溃。
总是没有任何特别的理由。
考虑到所有这些问题似乎是Windows的问题所以我们希望对此问题有一些澄清。
答案 0 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 3
void print_matrix(int** _mtx);
int main()
{
int i,j;
srand(time(NULL));
int **mtx;
mtx = malloc(sizeof(int*)*DIM);
for (i=0;i<DIM;i++)
{
mtx[i] = malloc(sizeof(int)*DIM); /* 1: sizeof int, not int* */
}
for(i=0;i<DIM;i++) /* 2: just DIM, not DIM*DIM */
{
for(j=0;j<DIM;j++)
{
mtx[i][j]= (int)(rand() % 10 + 1); /* 3: i * DIM + j magic is used if you have a 1 dimension array, but want to access it as two dimensions */
}
}
print_matrix(mtx);
free(mtx);
return 0;
}
void print_matrix(int** _mtx)
{
int i,j;
for(i=0;i<DIM;i++)
{
for(j=0;j<DIM;j++)
{
printf("%d ",_mtx[i][j]); /* 4: same as 3 */
}
printf("\n");
}
}