在解除引用之前将值分配给未初始化的指针

时间:2017-10-06 04:35:16

标签: c pointers dereference memory-access

我找到了一个代码片段,其中声明了一个char指针(比如说* pData)而没有初始化为NULL。

char *pData, *pData2;
char string[10] =  "Hello"
pData2 = &string[0];
SomeFuntionToAssignValue(pData2, &pData);

SomeFuntionToAssignValue(char *pData2, char **pData)
{
    if (something)
    {
        *pData = pData2;
    }
    else if (something)
    {
        *pData = &pData2[some calculation]
    }
}

可以在调用函数SomeFuntionToAssignValue()之后解除引用pData,在任何时候都会抛出“内存访问异常”错误吗?

因为在编译或本地测试期间(这里测试是在可以在任何时间重新加载的目标中进行的,所以通常内存损坏的可能性降低)我们没有遇到任何“内存访问异常”错误。

但是在现场环境中测试期间,目标没有重新加载至少一周的时间,引发了“内存访问异常”错误。

那么,有没有机会不执行char *pData = NULL导致“内存访问异常”错误?

1 个答案:

答案 0 :(得分:0)

是的,有可能,因为SomeFuntionToAssignValue 总是总是分配给*pData。将pData初始化为null 可以防止出现问题,因为其他代码可能会检查NULL但无法检查其未初始化值。但这完全取决于你没有表现出来的代码;一般来说,这种模式没有任何问题。