我在NetBeans IDE 8.2中运行c ++代码时出现问题,该代码具有声明字符串
#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;
}
#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 */
// #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的函数和变量时,所有工作正在工作
有什么问题?
答案 0 :(得分:0)
由于调用了函数,例如&#34; createPointer_INT&#34;,没有返回指针似乎毫无意义。由于这是一项任务,我认为这是预期的。如果是这种情况,您应该具有以下功能:
int *createPointer_INT(int element);
char *createPointer_CHAR(char element);
std::string *createPointer_STR(std::string element);
当函数执行并完成时,它返回新创建的变量的值(可能带有垃圾值),然后指针值超出范围。之后,您没有用于访问此新分配的内存的有效指针。我不确定运行时错误是什么,但我没有看到创建内存,将值设置为该值以及返回所述值的重点;留下内存泄漏而不是删除它或返回它。如果你像这样重新编码,我怀疑你会发现变得更容易,那么你可能没有这样的问题。如果这样做,您的编译器似乎遇到了STL库的问题。也许您对STL链接文件和编译器正在编译的内容有不同的构建。您可以尝试重新安装新的编译器。