我最近了解到:
(通常)内存中的堆总是向上增长
参考-> https://unix.stackexchange.com/questions/466443/do-memory-mapping-segment-and-heap-grow-until-they-meet-each-other
我大部分都不懂,但是当我搜索堆是否在内存中向上增长时,我得到了类似的结果。
考虑到 c/c++ 中的上述事实,我编写了一个检查循环检测的函数,如果指向结构的遍历指针指向temp
的内存地址小于链表中前一个节点的内存地址,则该函数返回 TRUE 以进行循环检测.
不幸的是,下面的代码在hackerrank上没有给出预期的结果,我想知道为什么。代码是:
bool has_cycle(SinglyLinkedListNode* head) {
struct SinglyLinkedListNode* temp = head;
int x;
if( temp == NULL )
return false; //FALSE indicates No cycle detected in linked list
if( temp->next == NULL )
return false;
x = temp;
while( temp->next != NULL )
{
temp = temp->next;
if( x >= temp )
return true; //TRUE indicates Cycle detected in linked list
x= temp;
}
return false;
}
我已经检查了堆中的内存分配是否向下if( x <= temp )
(降序)的条件,因为内存分配是特定于设备/编译器的,但这也不起作用。我想知道为什么这段代码不起作用以及这段代码存在哪些概念错误。