我参加了一次算法竞赛,在该竞赛中,我给出了一种方法来为C语言中的语言编写算法。该方法如下所示:
int algorithm(char** grid, int gridSize, int* gridColSize)
{...}
如果给服务器输入一个网格值:
[]
然后我收到了“ AddressSanitizer错误堆溢出-缓冲区溢出”
当我打印f()值gridColSize时,如下所示:
printf("[%d]", gridColSize);
它打印:
[16]
如果我像下面那样打印,则在编辑器的终端上会显示内存错误
printf("[%d]", *gridColSize);
因为我无法访问服务器上的隐藏代码。我如何检查和处理grid参数的输入值“ []”。
对于行和列值有效的以下输入,不会出现这种情况。如果row为零,则column的有效值> = 1,那么如何检查gridColSize地址是否为有效内存,并且可以跳过该输入以返回有效输出?
[我在互联网上看到很多有关为什么发生地址清理器问题的主题,但是我知道当我无法访问主代码时如何处理这种情况。
有人会帮我解决这个问题吗?
如何检查gridColSize地址是否是有效内存,并且可以跳过该输入以返回有效输出?
您无法检查是否可以访问由给定的非NULL指针指向的内存。
提供algorithm
函数的API,您可以:
grid
是否为NULL
。gridSize
是否为0。gridColSize
是否为NULL
。鉴于您检查了3(gridColSize
为16
),请尝试检查gridSize
。