请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

用C语言实现leetcode785号问题

如果使用C语言解决这个问题的话,那么该如何得到graph[v]的元素个数呢?
如果我这样写的话

int size = 0;
while (graph[v][size] >= 0 && graph[v][size] < graphSize)
	size++;

在ide中是可行的,但是leetcode中有AddressSanitizer,就会报heap buffer overflow的错误。

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2019-09-09 21:36:40

如果你确定是这个点的问题的话, 基本上是有数组越界的问题。C/C++编译器不对数据越界做额外检查,Leetcode的编译器有额外检查。


如果你确定是这个点的问题的话,确认一下每次调用 v 和 size 都是合法的索引值。


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_DX_5 #1
    bobo老师,我知道是数组越界的问题。如果使用C写这题的解题代码的话,leetcode提供的函数是这样的:
    bool isBipartite(int** graph, int graphSize, int* graphColSize){}
    通过graphSize我可以知道图有几个节点,graph[v]代表的意思是与v相连的节点,可是我不知道graph[v]的元素个数,C语言中也没有graph[v].size(),就遍历不了graph[v],我写问题中的代码,就是为了判断graph[v]有几个元素,最后就会报数组越界的错误。
    刚才再看这个函数,发现isBipartite函数中最后一个形参,graphColSize,才突然明白Col是column的意思,graphColSize存储的是就是节点v的相邻节点的个数,开始做题时,先入为主的认为Col是color的意思,就以为这个数组graphColSize与课程中二分图检测的数组color作用是相同的,哈哈。
    回复 有任何疑惑可以回复我~ 2019-09-09 22:24:08
  • liuyubobobo 回复 提问者 qq_DX_5 #2
    大赞!继续加油!:)
    回复 有任何疑惑可以回复我~ 2019-09-10 02:08:56
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信