c++ - 即使指针的 cout 指向内存地址,也显示“取消引用 null ptr”的代码。_malloca 用于分配内存
问题描述
#include <iostream>
int main()
{
int v = 2;
int* arr = (int*)_malloca(v * sizeof(int));
arr[0] = 200; //shows dereferencing null ptr
std::cout << *arr;
}
我曾经_malloca()
在堆栈上进行动态数组的内存分配(我知道向量在那里,我只是想尝试使用_malloca)。我只是想知道它是如何工作的,但与new
此不同的是,它会给出取消引用警告,并且不会在此处导致运行时错误。它arr
有一个内存地址,甚至接收值并打印它们。我错过了什么?
解决方案
答案由@NateEldredge 给出
这是一个警告。
_malloca
如果分配失败,则可以返回NULL
,并且您的代码不会对此进行测试。这是说它可能会取消引用空指针。
所以我添加了一个 if 语句来检查NULL
. 此外,在调试模式下_malloca
总是在堆中分配内存。因此,还要检查发布模式下的代码。
#include <iostream>
int main()
{
int v = 4;
int* arr = (int*)_malloca(v * sizeof(int));
if(arr != NULL) //a check is required if _malloca was able to allocate memory
for (int i = 0; i < v; i++)
{
arr[i] = i * 2;
std::cout << arr[i]<<"\n";
}
_freea(arr); //freeing the memory
}
推荐阅读
- latex - 如何在表格的单元格中列出带有 itemize 的列表?
- c# - 我无法向资源文件添加记录
- android - 如何从 webview 获取内容并将其显示在 Textview 中
- python-3.x - Tkinter 按钮导致无限循环
- vue.js - 错误:找不到模块'@vue/babel-preset-app'
- docker - 为什么 0.0.0.0 有效而 localhost 或 127.0.01 无效
- json - 缺少有关 Spotify 开发人员“曲目的音频分析”的信息
- regex - 通过命令行将双引号添加到 csv 文件的第一行
- php - 根据值对关联数组的键进行排名(函数错误)
- c# - 使用 signalR 和 async await 关键字通知 asp.net 核心中异步长作业的进度