-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]
    }
}

在调用函数 SomeFuntionToAssignValue() 后,取消引用 pData 是否可以在任何时间点引发“内存访问异常”错误?

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

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

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

4

1 回答 1

0

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

于 2017-10-06T15:31:34.043 回答