访问结构数组时打印的垃圾数据
garbage data printed on accessing struct array
我正在尝试运行以下代码,但它在访问结构数组值时给了我垃圾数据。为什么会发生这种情况,我该如何解决这个问题?一旦我将malloc部分移动到主要功能,它似乎就可以工作了。但是我想将 malloc 保留在一个单独的函数中。
#include <cstdlib>
#include <limits>
#include <iostream>
using namespace std;
/*
*
*/
typedef struct{
float x;
float y;
} CoordinateData;
void tester(CoordinateData* cd_data){
cd_data = (CoordinateData*)malloc(5*sizeof(CoordinateData));
CoordinateData data = {41.2525,74.0744};
*cd_data = data;
}
int main(int argc, char** argv) {
CoordinateData* cd_data;
tester(cd_data);
std::cout << (*cd_data).x << "::" << (*cd_data).y << std::endl;
}
我得到的输出是 2.42126e-39::-1.51015e-05预期输出为 41.2525::74.0744
按地址传递cd_data,而不是按值传递:
void tester(CoordinateData** cd_data)
{
*cd_data = (CoordinateData*)malloc(5*sizeof(CoordinateData));
CoordinateData data = {41.2525,74.0744};
*(*cd_data) = data;
}
int main(int argc, char** argv)
{
CoordinateData* cd_data = NULL;
tester(&cd_data);
std::cout << (*cd_data).x << "::" << (*cd_data).y << std::endl;
free(cd_data);
return EXIT_SUCCESS
}
另请注意,您缺少main()
的返回值。也。此问题标记为 C 和 C++。如果是后者,请使用new
和delete[]
而不是malloc
和free
因为malloc
将内存分配给传递给函数的指针的副本。
传递给函数的指针永远不会分配任何内存或数据。
您需要通过引用传递。
//Call function as
tester(&cd_data);
//Function Implementation
void tester(CoordinateData** cd_data)
{
*cd_data = (CoordinateData*)malloc(5*sizeof(CoordinateData));
CoordinateData data = {41.2525,74.0744};
*(*cd_data) = data;
}
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 动态分配的聊天数组打印缺失的数据和空
- 访问和打印元组中的数据,并使用 C++14 使用模板函数显示数据
- C++ 打印包含数据结构的数组
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 打印从SQLite3数据库检索的数据C++与命令行中相同的方式
- 重写函数不打印基类数据
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- C++ 尝试优化每一帧将数据打印到二进制文件
- 使用链表数据结构打印多项式
- 如何打印在二叉搜索树中找到的数据?
- C++ Expat 仅打印元素的第一个字母和标签中的数据
- 如何在c ++中以一行(水平)打印两个文件的数据?如给定的.这两种形式来自两个不同的文本文件
- 在打印方法中,难以在二进制树中打印数据
- 是否有一个标准函数可以打印/监视stdin文件的内容,同时将数据留在stdin中
- 使用ifstream时,被调用文件中的数据不会打印
- 面临在 if 语句之外打印变量数据的问题 完成使用 Qt 编程
- C++模板方法选择正确的数据打印方式
- 无法将二维数组中的数据打印到C++的输出文件
- 在C++中读取数据列、移位、将数据打印到.txt文件