我试图检查指针数组中的指针是否为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)
{
答案 0 :(得分:3)
您需要自己将数组memory
的内容初始化为NULL:编译器不会在malloc
调用时为您执行此操作。目前,程序的行为未定义,因为您正在读回未初始化的指针值。
最好的办法是使用calloc
,它将设置指向空指针值的指针。
答案 1 :(得分:2)
在您的代码中,malloc()
memory
时,您为变量memory
分配了一些内存。您从未初始化*memory
或memory[i]
的内容。它们可能不是NULL
,正如您所期望的那样。它们很可能包含垃圾值。
所以,基本上,稍后,
if(memory[itr_mry] == NULL)
尝试使用未初始化的内存,这会导致undefined behavior。
解决方案:您需要使用calloc()
来获取零初始化内存,以便至少可以在*memory
或memory[i]
上运行NULL检查。