CWE Rule 824
Description
Rule Description
The program accesses or uses a pointer that has not been initialized.
Polyspace Implementation
The rule checker checks for Non-initialized pointer.
Examples
This issue occurs when a pointer is not assigned an address before dereference.
Unless a pointer is explicitly assigned an address, it points to an unpredictable location.
The fix depends on the root cause of the defect. For instance, you assigned an address to the pointer but the assignment is unreachable.
Often the result details (or source code tooltips in Polyspace as You Code) show a sequence of events that led to the defect. You can implement the fix on any event in the sequence. If the result details do not show this event history, you can search for previous references of variables relevant to the defect using right-click options in the source code and find related events. See also Interpret Bug Finder Results in Polyspace Desktop User Interface or Interpret Bug Finder Results in Polyspace Access Web Interface (Polyspace Access).
See examples of fixes below. It is a good practice to initialize a pointer to NULL when declaring the pointer.
If you do not want to fix the issue, add comments to your result or code to avoid another review. See:
Address Results in Polyspace User Interface Through Bug Fixes or Justifications if you review results in the Polyspace user interface.
Address Results in Polyspace Access Through Bug Fixes or Justifications (Polyspace Access) if you review results in a web browser.
Annotate Code and Hide Known or Acceptable Results if you review results in an IDE.
If a pointer in your code is non-initialized only for certain system input values, you can see one possible combination of input values causing the defect. See Extend Bug Finder Checkers to Find Defects from Specific System Input Values.
#include <stdlib.h>
int* assign_pointer(int* prev)
{
int j = 42;
int* pi;
if (prev == NULL)
{
pi = (int*)malloc(sizeof(int));
if (pi == NULL) return NULL;
}
*pi = j; //Noncompliant
/* Defect: Writing to uninitialized pointer */
return pi;
}
If prev
is not NULL
,
the pointer pi
is not assigned an address. However, pi
is
dereferenced on every execution paths, irrespective of whether prev
is NULL
or
not.
One possible correction is to assign an address
to pi
when prev
is not NULL
.
#include <stdlib.h>
int* assign_pointer(int* prev)
{
int j = 42;
int* pi;
if (prev == NULL)
{
pi = (int*)malloc(sizeof(int));
if (pi == NULL) return NULL;
}
/* Fix: Initialize pi in branches of if statement */
else
pi = prev;
*pi = j;
return pi;
}
Check Information
Category: Pointer Issues |
Version History
Introduced in R2023a
See Also
External Websites
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)