疑似越界问题
大一新生,在尝试实现神经网络的padding时,在下面代码标红处出现了(0x00845695 处(位于 作业.exe 中)引发的异常: 0xC0000005: 写入位置 0xCDCDCDCD 时发生访问冲突。) 怀疑是否有越界问题,但细看代码觉得合理。遂来问各位大佬,请大佬们不吝赐教。
#include<stdio.h>
#include<malloc.h>
int main()
{
int** a;//创建二维数组a
int i, j;
a = (int**)malloc(sizeof(int*) * 3);//行数为3
for (i = 0; i < 3; i++)
a[i] = (int*)malloc(sizeof(int) * 3);//列数为3
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf_s("%d", &a[i][j]);//输入a各个位置的值
int padding = 0;
scanf_s("%d", &padding);//输入padding的值
if (padding > 0)
{
int** b;//创建二维数组b
b = (int**)malloc(sizeof(int*) * (3 + 2 * padding));//行数上下加padding行
for (i = padding; i < (3 + 2 * padding); i++)
b[i] = (int*)malloc(sizeof(int) * (3 + 2 * padding));//列数左右加padding列
for (i = padding; i < (3 + padding); i++)
for (j = padding; j < (3 + padding); j++)
b[i][j] = a[i - padding][j - padding];//将a的值嵌入b的正中间
for (i = 0; i < padding; i++)//给前padding行的元素赋值0
for (j = 0; j < (3 + padding); j++)
b[i][j] = 0;
for (i = (2 + padding); i < (3 + 2 * padding); i++)//给后padding行的元素赋值0
for (j = (2 + padding); j < (3 + 2 * padding); j++)
b[i][j] = 0;
for (j = 0; j < (3 + padding); j++)//给前padding列的元素赋值0
for (i = 0; i < padding; i++)
b[i][j] = 0;
for (j = (2 + padding); j < (3 + 2 * padding); j++)//给后padding列的元素赋值0
for (i = (2 + padding); i < (3 + 2 * padding); i++)
b[i][j] = 0;
printf("%d", b[0][0]);//输出b
free(b[i]);//释放b
free(*b);
}
free(a[i]);//释放a
free(*a);
}