检查指针数组中指针是否为空

时间:2015-12-16 09:51:17

标签: c arrays pointers memory

我试图检查指针数组中的指针是否为NULL。运行时程序崩溃,debbugger指向if()条件,但我不知道错误。

main.c

  unsigned int** memory = malloc(sizeof(unsigned int*)*MEMORY_SIZE);

    /* malloc failed */
    if (!memory)
    {

       return EXIT_FAILURE;
    }

    Process myProcess = { 1, 2, -1};

    /* TEST THAT WORKS */
    /* memory[0] = &(myProcess.m_id); */
    /* printf("%u", *memory[0]); */


    AllocFirstFit(&myProcess, memory);

在另一个.c文件中

void AllocFirstFit(Process* process, unsigned int** memory)
{
    unsigned int itr_mry;
    /* Declaration of various other local variable here*/

    /* browsing the memory */
    for(itr_mry = 0; itr_mry < MEMORY_SIZE; ++itr_mry)
    {
        /* if memory unit is null */
        /* debugger point this line. This condition is never true for some reason */ 
        if(memory[itr_mry] == NULL)
        {

2 个答案:

答案 0 :(得分:3)

您需要自己将数组memory的内容初始化为NULL:编译器不会在malloc调用时为您执行此操作。目前,程序的行为未定义,因为您正在读回未初始化的指针值。

最好的办法是使用calloc,它将设置指向空指针值的指针。

答案 1 :(得分:2)

在您的代码中,malloc() memory时,您为变量memory分配了一些内存。您从未初始化*memorymemory[i]的内容。它们可能不是NULL,正如您所期望的那样。它们很可能包含垃圾值。

所以,基本上,稍后,

 if(memory[itr_mry] == NULL)

尝试使用未初始化的内存,这会导致undefined behavior

解决方案:您需要使用calloc()来获取零初始化内存,以便至少可以在*memorymemory[i]上运行NULL检查。