C-内存分配的错误


int main(void)
{
    // create a node
    node* list1 = malloc(sizeof(node));
    node* list2 = malloc(sizeof(node));
    list1 -> n = 2; 
    list2 -> n = 5;
    list1 -> next = list2;
    list2 -> next = NULL;
    if(search(5, list1))
        printf("Truen");
    else
        printf("Falsen");
}

在上面的程序中,当我初始化类型节点的变量时,我必须明确分配这些变量的内存,否则编译器正在丢弃错误。

bool search(int n, node* list)
{
    node* ptr = list;
    while(ptr != NULL)
    {
        if(ptr -> n == n)
        {
            return true;
        }
        ptr = ptr->next;
    }
    return false;
}  

但是,在上面的功能"搜索"中,我有一个类型节点" ptr"的变量,但是我在没有明确分配内存的情况下通过。为什么此功能没有错误?

在您的Q中添加警告是一个好主意。但是,我认为这是类似于"非初始化变量"。

如PM100的评论中所述,执行程序时,您可能会遇到运行时错误。但是,它具有相同的原因。

"初始化"并不意味着"分配分配的内存",而是为其分配任何值。在search()中,您在此处正确执行此操作:

node* ptr = list;

main()中,如果您只有:

node* list1; // No initialization

btw:编译器可以检测到是否为其分配NULL,然后用->将其分配。因此,如果您有这样的代码,可能会有错误:

node* list1 = NULL;
list1 -> n = 2; // Dereferencing NULL pointer constant

但是编译器是否检测到这取决于他。同样,在运行时您将在任何一种情况下都会出现错误。

我有一个类型节点" ptr"的变量,但我在没有明确分配内存的情况下通过。为什么此功能没有错误?

ptr不是类型node。代码具有称为ptr的变量,即指针 tote node

以下代码为 pointer

创建了空间
node* ptr = list;

相关内容

  • 没有找到相关文章

最新更新