【问题标题】:NetBeans IDE 8.2 C++ string declaring problemsNetBeans IDE 8.2 C++ 字符串声明问题
【发布时间】:2018-02-02 05:42:27
【问题描述】:

我在 NetBeans IDE 8.2 中运行 c++ 代码时遇到问题,它有一个字符串声明

课程1.cpp

#include <string>
#include <iostream>

int createPointer INT(int element)
{
    int *pointer = new int(element);
    return *pointer;
}

char createPointer_CHAR(char element)
{
    char *pointer = new char(element);
    return *pointer;
}

std::string createPointer_STR(std::string element)
{
    std::string *pointer = new std::string(element);
    return *pointer;
}

第1课.h

#include <string>

#ifndef LESSON1_H
#define LESSON1_H

int createPointer_INT(int element);
char createPointer_CHAR(char element);
std::string createPointer_STR(std::string element);

#endif /* LESSON1_H */

main.cpp

// #include <cstdlib> -- for system
// #include <string>
#include <iostream>
#include <string>
#include "lesson1.h"

int main() {
    int element0 = createPointer_INT(50);
    char element1 = createPointer_CHAR('U');
    std::string element2 = createPointer_STR("something");
    std::cout << element0 << std::endl << element1 << std::endl << element2;

    return 0;
}

构建成功,但运行失败。

最终输出:RUN FAILED(退出值-1 073 741 511,总时间:45ms)

当我评论所有具有 std::string 的函数和变量时,一切都在工作

有什么问题?

【问题讨论】:

  • 此代码未构建,因为int createPointer INT(int element) 缺少下划线。请发布您的实际代码。
  • “最终输出:运行失败” - 输出来自哪里?你从cout 中得到了什么价值?
  • 除了大量的内存泄漏,这对我有用。
  • @Mawg,来自我项目的输出窗口中名为“cpp_Lessons (Run)”的书签中
  • @Mawg,这是我的实际代码。

标签: c++ string netbeans


【解决方案1】:

由于函数被调用,例如“createPointer_INT”,不返回所述指针似乎毫无意义。由于这是一项任务,我认为这是预期的结果。如果是这样的话,你应该有这样的功能:

int *createPointer_INT(int element);
char *createPointer_CHAR(char element);
std::string *createPointer_STR(std::string element);

当函数执行并完成时,它返回新创建的变量的值(可能带有垃圾值),然后指针值超出范围。之后,您将没有有效的指针来访问这个新分配的内存。我不确定运行时错误是什么,但我看不到创建内存、将值设置为该值并返回所述值的意义;留下内存泄漏而不是删除或返回它。我怀疑如果你像这样重新编码,你会发现事情变得更容易,那时你可能不会遇到这样的问题。如果这样做,您的编译器似乎对 STL 库有问题。也许您对 STL 链接文件和编译器正在编译的内容有不同的构建。您可以尝试重新安装新的编译器。

【讨论】:

  • int *createPointer_INT(int element); char *createPointer_CHAR(char element); std::string *createPointer_STR(std::string element); 没有帮助
  • 这个想法是同时改变函数本身、返回的内容以及它们的使用方式。再做一次,并调整你的函数以使用新的原型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 2014-01-03
  • 2010-12-31
相关资源
最近更新 更多