这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
What is this pointer and memory code printing? I don't know if it's printing garbage or how to print the value that I need
这是我从一个更大的代码中提取的一段代码。我需要弄清楚我打印的内容是否是垃圾,以及如何更改它以打印我需要的值。我需要它来打印int id
的值,而不是它打印的任何值。在这次运行中,输出是10813776
,当然,每当我更改一些代码或重新启动DevC++时,它就会发生变化。
代码为:
#include <iostream>
#include <memory> //Memory allocation (malloc)
using namespace std;
int main(){
int id = 0;
int nMemory = 0;
int * pMemory;
pMemory = (int *) malloc(20 * sizeof(int));
while(id < 20){
if (pMemory != NULL){
cout << "Numbers in memory: " << endl;
pMemory = new int[id];
nMemory = *pMemory;
cout << nMemory << endl;
}
id++;
}
delete pMemory;
return 0;
}
pMemory = new int[id]; nMemory = *pMemory;
第一行用一个未初始化的新数组替换malloc
初始化的数组,然后尝试从该新数组的第一个插槽中读取。您不应该直接分配给pMemory
;可能到pMemory[someIndex]
而不是到pMemory
本身。
您是否正在尝试读取pMemory
数组并将其分配给nMemory
?如果是,请将上面的行更改为:
nMemory = pMemory[id];
你的整个循环应该看起来更像这样:
if (pMemory != NULL) {
cout << "Numbers in memory: " << endl;
while(id < 20) {
nMemory = pMemory[id];
cout << nMemory << endl;
id++;
}
}
或者,使用更惯用的for
循环:
if (pMemory != NULL) {
cout << "Numbers in memory: " << endl;
for (int i = 0; i < 20; i++) {
cout << pMemory[i] << endl;
}
}
(你还必须在这个循环上方的某个地方初始化数组。我想你在实际代码中会这样做,但如果不是这样:你发布的代码分配了一个带有malloc()
的数组,但没有将项设置为有用的值。在你尝试读取和打印它们之前,请确保将它们设置为有意义的值。(
此代码正在泄漏您使用malloc()
和new[]
分配的内存块。
malloc()
是一个内存块,并将其地址分配给pMemory
,然后将pMemory
更改为指向与new[]
分配的不同内存地址。所以你失去了free()
的能力——malloc()
的内存(你甚至没有试图调用free()
(。
而且,此代码没有正确释放使用new[]
分配的内存。用new[]
分配的内存必须用delete[]
释放,而不是用delete
释放。更糟糕的是,您在一个循环中调用new[]
20次,但在循环之后只调用delete
一次。因此,您泄漏了19个new[]
ed内存块,并且有未定义的行为释放了1个块。
现在,为了回答您的实际问题,代码正在打印垃圾,因为您使用new[]
分配的内存是未初始化的,所以您试图从该内存打印的数据包含不确定的值。
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 如何使用重新定义的打印函数打印Lua表?
- 在 POS 打印机上打印条形码字体
- 视觉打印没有打印任何输出内容?C++ SDL
- 打印,打印到MAC OS X上
- 为类打印输出(打印调试信息)的最佳实践是什么?
- QWebView不在实际打印机上打印多页
- 有没有办法创建一个公共输出流对象以在控制台上打印并打印到 c++ 中的文件
- 防止在打印C++打印中打印标志
- <string> 当我得到一个'compilr.com/rayd360/test-songst'时如何打印出打印矢量
- 在打印机上打印(windows平台32位)
- 流可以用来在打印机上打印