AddressSanitizer错误,同时通过printf()访问内存地址的值

问题描述 投票:0回答:1

我参加了一次算法竞赛,在该竞赛中,我给出了一种方法来为C语言中的语言编写算法。该方法如下所示:

int algorithm(char** grid, int gridSize, int* gridColSize)
{...}

如果给服务器输入一个网格值:

[]

然后我收到了“ AddressSanitizer错误堆溢出-缓冲区溢出”

当我打印f()值gridColSize时,如下所示:

printf("[%d]", gridColSize);

它打印:

[16]

如果我像下面那样打印,则在编辑器的终端上会显示内存错误

printf("[%d]", *gridColSize);

因为我无法访问服务器上的隐藏代码。我如何检查和处理grid参数的输入值“ []”。

对于行和列值有效的以下输入,不会出现这种情况。如果row为零,则column的有效值> = 1,那么如何检查gridColSize地址是否为有效内存,并且可以跳过该输入以返回有效输出?

[我在互联网上看到很多有关为什么发生地址清理器问题的主题,但是我知道当我无法访问主代码时如何处理这种情况。

有人会帮我解决这个问题吗?

c pointers memory-address address-sanitizer
1个回答
0
投票

如何检查gridColSize地址是否是有效内存,并且可以跳过该输入以返回有效输出?

您无法检查是否可以访问由给定的非NULL指针指向的内存。

提供algorithm函数的API,您可以:

  1. 检查grid是否为NULL
  2. 检查gridSize是否为0。
  3. 检查gridColSize是否为NULL

鉴于您检查了3(gridColSize16),请尝试检查gridSize

© www.soinside.com 2019 - 2024. All rights reserved.