﻿# V1031\. Function is not declared\. The passing of data to or from this function may be affected\.

The analyzer has detected a function used in a file without being declared first\. It is a legitimate practice in the C language, but it is potentially dangerous as it may lead to incorrect program behavior\.

Consider the following simple example:

```cpp
char *CharMallocFoo(int length)
{
  return (char*)malloc(length);
}
```

Since the header file <stdlib\.h\> has not been included, the C compiler assumes that the 'malloc' function will return a value of type 'int'\. Incorrect interpretation of the return value may cause run\-time errors, including a crash\.

If your program is 64\-bit, it is very likely that the 32 most significant bits of the return address will be lost\. This means that the program will execute correctly for some time, but when the 4 less significant gigabytes of memory are used up or become heavily fragmented, the system will allocate a buffer beyond those 4 gigabytes\. Since the most significant bits of the pointer have been lost, the implications will be quite unpleasant and unpredictable\. This issue is discussed in detail in the article "[A nice 64\-bit error in C](https://pvs-studio.com/en/blog/posts/cpp/0033/)"\.

Fixed code:

```cpp
#include <stdlib.h>
....
char *CharMallocFoo(int length)
{
  return (char*)malloc(length);
}
```