2017-10-06 110 views
-1

我找到了一个代码片断,其中的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] 
    } 
} 

可提领的pData,调用函数SomeFuntionToAssignValue(),在任何时间点后抛出一个“内存访问异常”错误?因为在编译或本地测试期间(这里的测试是在可以在任何时间点重新加载的目标中完成的,所以通常内存损坏的机会减少),我们没有遇到任何“内存访问异常”错误。

但是在现场环境测试期间,至少在一周的时间内未重新加载目标,导致出现“内存访问异常”错误。

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

+0

除非您指定平台,体系结构和编译器,否则C没有“内存访问异常”。 –

+0

以您展示它的方式调用函数,在调用之后使用'pData'将是安全的。 –

+1

@Someprogrammerdude - 如果'一些计算'给出范围[0,strlen(pData2)]的结果,则安全 –

回答

0

是的,有机会的话,因为你的SomeFuntionToAssignValue总是分配给*pData。并初始化pData为空可能防止出现问题,因为其他代码可能正在检查NULL但无法检查其未初始化的值。但这一切都取决于你没有显示的代码;一般来说,这种模式没有任何问题。