C++ 返回数组,数据丢失[重复]

2024-01-06

我是来自 Java 的 C++ 新手,所以请原谅我的天真,但我正在尝试从函数中传递数组。我知道执行此操作的方法是传递指针,如下所示:

int *foo(){
   int arr[3] = {1, 2, 3};
   int *arrptr = arr;
   return arrptr;
}

然后访问该数组:

int main(){
   int *arrptr = foo();  //create a pointer to array

   //cout all elements
   for(int x = 0; x < 3; x++)
      cout << arrptr[x];

   return 0;
}

当然,这效果很好。但由于某种原因,在不同的代码中,这个相同的过程仅返回数组的第一个值,其余的似乎是随机的。

int main(){
   stringstream allstats;
   allstats << readFile(); //readFile() simply returns a string read from a file

   while(!allstats.eof()){     //check for end of stream
      string temp;             
      getline(allstats, temp); //grab a line from allstats and put it into temp

      double *arr = calculateStats(temp); //create pointer to array of stats calculated for temp

      // print arr
      for(int x = 0; x < 6; x++)
         cout << arr[x] << endl;
      //****This spits out the correct value for arr[0] but for the rest of the array
      //****it is values like 8.58079e-306 which tells me those addresses have been
      //****overwritten.

   }
   return 0;
}

//calculate stats for each player, return as formatted string
double* calculateStats(string player){
   //cut for conciseness, just know it works and the proper values are in the following array

   //create stat array
   double statarr[6] = {(double)BA, (double)OB, (double)H, (double)BB, (double)K, (double)HBP};

   //create pointer to stat array
   double *ptr;
   ptr = statarr;

   return ptr;
}

在 Java 中,这就像返回一个数组一样简单,工作就完成了。这在 C++ 中是否可能,或者这超出了我的理解水平,并且解决方案比我想象的要复杂得多?


您不能在外部函数中使用对本地数组的指针引用,因为一旦本地函数退出,它的堆栈可能会被重用,并且本地变量中的数据将包含垃圾。

您可以将单词 static 添加到本地数组声明中,使其内存在其他函数(和重复调用)中保持不变。尽管这根本不是推荐的解决方案。

Change:

double statarr[6] = {(double)BA, (double)OB, (double)H, (double)BB, (double)K, (double)HBP};

To:

static double statarr[6] = {(double)BA, (double)OB, (double)H, (double)BB, (double)K, (double)HBP};

不过,更好的解决方案是不将数组声明为本地数组计算统计数据

就像是:

    //calculate stats for each player, return as formatted string
double* calculateStats(string player, double *outArr){
   //cut for conciseness, just know it works and the proper values are in the following array

   //create stat array
   outArr[0] = (double)BA;
   outArr[1] = (double)OB;
   outArr[2] = (double)H;
   outArr[3] = (double)BB;
   outArr[4] = (double)K;
   outArr[5] = (double)HBP;


   return outArr;
}

然后有:

int main(){
   stringstream allstats;
   allstats << readFile(); //readFile() simply returns a string read from a file

   while(!allstats.eof()){     //check for end of stream
      string temp;             
      getline(allstats, temp); //grab a line from allstats and put it into temp

      double arr[6]
      calculateStats(temp, arr) //create pointer to array of stats calculated for temp

      // print arr
      for(int x = 0; x < 6; x++)
         cout << arr[x] << endl;
      //****This spits out the correct value for arr[0] but for the rest of the array
      //****it is values like 8.58079e-306 which tells me those addresses have been
      //****overwritten.

   }
   return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 返回数组,数据丢失[重复] 的相关文章

  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • 如何使用 C# 以编程方式编辑 Power BI Desktop 文档参数或数据源?

    我有一个在 Power BI Desktop 中内置的报告模板 并保存为 pbix 或 pbit 文件 该模板使用DirectQuery SQL数据库作为数据源 而服务器地址和数据库名称被提取到参数中 还有一个参数包含一个ReportId
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • 提升mapped_file_source、对齐方式和页面大小

    我正在尝试在性能很重要的上下文中解析一些大小高达几百兆字节的文本文件 因此我使用 boostmapped file source 解析器期望源以空字节终止 因此我想检查文件大小是否是页面大小的精确倍数 如果是 则使用较慢的非内存映射方法 我
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 测验;这个编译了吗?如果是的话它会返回什么(我知道答案)

    我最近发现这个错字 if name find string npos 显然开发者的意思是输入 if name find string npos 但令我惊讶的是发现错误甚至编译 Wall Werror 没有尝试过 pedantic 那么 咖啡
  • C++ 模板可以提供 N 个给定类的公共父类吗?

    我正在寻找一个 C 模板 它可以找到一组给定类的共同父级 例如 class Animal class Mammal public Animal class Fish public Animal class Cat public Mammal
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 在二进制数据文件的标头中放入什么

    我有一个模拟 可以读取我们创建的大型二进制数据文件 10 到 100 GB 出于速度原因 我们使用二进制 这些文件依赖于系统 是从我们运行的每个系统上的文本文件转换而来的 所以我不关心可移植性 当前的文件是 POD 结构的许多实例 使用 f
  • F# 中的数组初始化

    如何根据给定的记录类型在 F 中创建和初始化数组 假设我想创建一个包含 100 个 record1 记录的数组 e g type record1 value1 string value2 string let myArray Array i
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • 运行 xunit 测试时无法将输出打印到控制台窗口

    public class test2InAnotherProject private readonly ITestOutputHelper output public test2InAnotherProject ITestOutputHel
  • 如何知道 HTTP 请求标头值是否存在

    我确信这很简单 但是却让我感到厌烦 我在 Web 应用程序中使用了一个组件 它在 Web 请求期间通过添加标头 XYZComponent true 来标识自身 我遇到的问题是 如何在视图中检查此组件 以下内容不起作用 if Request
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 如何使用 MVC Web Api 内容服务器和 Android 最终用户 apk 实现 OWIN 身份验证服务器

    我正在尝试实施 用于按需返回内容的 MVC Web API 服务器 REST 服务器 中央身份验证 OAuth 2 0 服务器 例如 OWIN Android 最终用户端应用程序 场景是这样的 Android应用程序在REST服务器上请求内
  • 使用 node.js 在 Azure 文件存储中上传文件

    我们正在尝试创建一个 Web 服务 以使用 node js 服务将文件上传到 Azure 文件存储 下面是node js服务器代码 exports post function request response var shareName r
  • 为什么 PRIVATE 成员函数不能成为另一个类的友元函数?

    class x void xx class y friend void x xx 这会导致类似的错误 错误 友元函数 xx 是 x 的私有成员 为什么我不能将私有成员函数声明为另一个类的友元 同学 朋友 9 http eel is c dr
  • iOS AppStore 上的 CCATS 和加密

    这将是一个很长的问题 实际上是一组相关的问题 我想制作一个 iOS 应用程序 将在 Apple 的 App Store 上出售 显然 我的应用程序将在文档目录中存储一些敏感的用户数据 出于安全原因 我想到了一种可以保护该数据的加密系统 有趣
  • 所得税计算的编程逻辑

    谁能帮我为我们的办公室员工工资税表创建 PHP 或 mysql 代码 这是我们税收监管的基础 If salary is gt 0 and lt 150 it will be 0 Nill If salary is gt 151 and lt
  • 删除完整磁盘上最旧的文件

    一个以 100MB 块将数据写入磁盘并通过附加 1 来增加文件名的应用程序 因此n1 n2 n1000 这最终会使用分区 Linux 主机 上的所有可用空间 我正在寻找一种方法来删除该系列中首次写入的文件 直到驱动器空间达到特定利用率 如果
  • 从窗口类名获取窗口句柄

    我试图在我的进程中获取子窗口的窗口句柄 我拥有的唯一信息是窗口类名称 我可以使用任何 win32 函数吗 我是用 C 做的 更详细一点 这是一个 Visual Studio 插件 用 C 编写 所以我的流程是 Visual Studio 它
  • 如何在PHP中通过计算总和来显示数据库中数量最多的酒店名称?

    我是 PHP 编码新手 我想根据用户从复选框中选择的偏好的相应计数 以升序显示数据库中的酒店名称 我的代码根据用户输入的偏好显示酒店名称 其逻辑是 如果数据库中针对该酒店的首选项名称下存在 1 则显示酒店名称 例如 如果用户从 7 个复选框
  • 是否可以将数据绑定到扩展方法?

    缺乏关于该主题的问题可能表明这里有代码味道 但是 是否可以为类编写扩展方法并像属性一样对其进行数据绑定 假设我提供了一个无法从根本上更改的类结构 但我想将其一系列布尔属性表示为字符串以用于显示目的 简化的基类 public class Tr
  • 如何为托管虚拟机配置 Google App Engine 运行状况检查端点

    Google App Engine 向托管虚拟机请求 ah health 进行运行状况检查 我尝试部署一个我不是代码维护者的项目 它将部署为托管虚拟机以进行自动缩放和运行状况检查 目前 app yaml 不支持重写规则 如果支持 我可以将
  • ruby:如何知道脚本是否在第三次重试?

    begin some routine rescue retry on third retry output no dice end 我想让它在 第三次 重试时打印一条消息 可能不是最好的解决方案 但一个简单的方法就是制作一个tries多变的
  • Selenium 上的 JavaScriptexecutor setAttribute 值

    我正在 IE11 上执行 selenium 自动化 现在对于一个元素 说 ele ele sendKeys characters 不直接工作 所以我试图改变它的 值 属性
  • 将参数传递给 javascript onclick 函数

    我在从 javascript onClick 函数获取参数时遇到问题 title as li class item li 我的控制台日志打印此 Uncaught SyntaxError Unexpected token 请不要使用内联js
  • 为什么 Eclipse 需要传入网络连接(使用 OS X)?

    有谁知道为什么 Eclipse 要求传入网络连接 我四处搜索 看到提到使用 PyDev 进行代码完成 但我在 PyDev 中禁用了代码完成 重新启动 但仍然提示传入网络连接 PyDev 生成一个 shell 并连接到它以请求有关内置模块的信
  • iphonecamerOverlay 用于替代现实应用程序

    有谁知道如何拍摄 iPhone 相机上捕获的图像 并进行一些图像处理 例如边缘检测 骨架化 然后将处理后的图像的一部分覆盖在原始图像上 例如仅突出显示的边缘 更一般地说 如何创建具有透明度的 UImage 我是否只是缩放图像并用 alpha
  • 为每个循环附加到新列表

    我正在运行一个 for 循环 并将一个值附加到循环中运行的每个文件的列表中 当我使用append 时 在第二次运行for循环期间 它将新值附加到与第一次运行循环中相同的列表中 有没有办法在每次循环运行时追加并创建一个新列表 phaseres
  • 将 CIFiler 应用于图像的遮罩部分

    我正在寻找一种将 CIFilter 应用于由蒙版定义的图像部分的方法 像这样 给定图像 来源http imageshack us scaled landing 213 browserpreviewtmp1p jpg http imagesh
  • 命令 PhaseScriptExecution 失败,退出代码非零 Xcode 11.3.1

    我正进入 状态Command PhaseScriptExecution failed with a nonzero exit code经常出错 我遵循以下解决方法但没有帮助我 解决方法1 钥匙串访问 gt 右键单击 登录 gt 再次锁定和解
  • 通用擦除概念

    您能帮我理解这里的通用概念吗 Can t create an instance of T class Gen
  • C++ 返回数组,数据丢失[重复]

    这个问题在这里已经有答案了 我是来自 Java 的 C 新手 所以请原谅我的天真 但我正在尝试从函数中传递数组 我知道执行此操作的方法是传递指针 如下所示 int foo int arr 3 1 2 3 int arrptr arr ret