【发布时间】:2019-12-14 05:28:08
【问题描述】:
我是 C 的新程序员,最近我渴望学习机器学习。我编写了一个程序只是为了了解内核是如何工作的,但结果证明它给了我一个未定义的行为错误。问题很可能出在计算 O 数组中,或者可能出在打印中。
int S[M][N];
srand(time(NULL));
for(i = 0; i < M; i++) {
for(j = 0; j < N; j++) {
S[M][N] =rand() % ARRAY_RANGE;
printf("%d\t", S[M][N]);
}
printf("\n\n");
}
//S[M][N] initialized and printed here. No problem.
int K[3][3];
printf("Enter the kernel: \n");
for( i = 0 ; i<3; i++ ){
for(j = 0; j<3; j++){
scanf("%d", &K[i][j]);
}
}
for( i = 0 ; i<3; i++ ){
for(j = 0; j<3; j++){
printf("%4d", K[i][j]);
}
printf("\n\n\n");
}
unsigned long long int O[M][N] = {{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};
long int sum,m,n;
for(i = 0; i < M-2 ; i++){
for(j = 0; j < N-2; j++){
for(k = 0; k < 3; k++){
for(l = 0; l < 3; l++){
O[i+1][j+1] += (S[i+l][j+k])*(K[k][l]);
}
}
}
}
for (i=0; i<M; i++){
for(j=0; j<N; j++){
printf("%d", O[i][j]);
}
printf("\n");
}
return 0;
}
应该是这样的:
0 0 0 0 0
0 *calculated 3 integers of O array* 0
0 *calculated 3 integers of O array* 0
0 *calculated 3 integers of O array* 0
0 0 0 0 0
但它会给出随机的非常大或非常小的数字,例如“3241242”或“-2431452”,我在其中写了计算出 O 数组的 3 个整数。
-编辑了我如何初始化 S 数组。我也包含了 stdio.h、stdlib.h、time.h。
【问题讨论】:
-
请解释它应该做什么,它做了什么,确切的错误是什么,它是编译时错误还是运行时错误等。我们需要细节来帮助你
-
对不起,我是 Stack Overflow 的新手,无法立即回复:它应该像一个 5x5 矩阵,顶部有 5 个零,底部有 5 个零,中间有 5 个零,如下所示:0 计算O数组的三个整数 0
-
然后它做了什么?
-
@whysoserious 没问题,欢迎来到 SO!我建议editing your post 提供输入/输出作为具体示例,并附上解释。在某些数据中硬编码比依赖
scanf更好,这可能是任何东西。谢谢。 -
我不知道错误的类型,但它看起来像整数溢出。在我写 计算 O 数组的三个整数的地方,有随机的非常大的数字或非常小的负数,例如:19725214 或 -24246214
标签: c arrays multidimensional-array