﻿# V2585\. MISRA\. Casts between a void pointer and an arithmetic type should not be performed\.

This diagnostic rule is based on the [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) software development guide\.

This rule only applies to programs written in C\. A cast between a variable or an arithmetic type literal and 'void \*' may cause undefined \(for floating\-point numbers\) or platform\-specific behavior \(for integer types\)\.

Consider the first synthetic example:

```cpp
void* foo(void)
{
  double pi = 3.14;
  return pi;
}
```

In this case, the double 'pi' variable is implicitly cast to 'void \*'\. Such code will lead to undefined behavior\.

Take a look at the second synthetic example:

```cpp
void bar(void)
{
  int a = 5;
  void* b = (void*)a;
}
```

Here the 'int' variable is explicitly cast to the 'void \*' pointer\. Further dereferencing of such a pointer may lead to [segfault](https://pvs-studio.com/en/blog/terms/0063/)\.