-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
可能导致“内存访问异常”错误?
除非您指定平台,体系结构和编译器,否则C没有“内存访问异常”。 –
以您展示它的方式调用函数,在调用之后使用'pData'将是安全的。 –
@Someprogrammerdude - 如果'一些计算'给出范围[0,strlen(pData2)]的结果,则安全 –