【问题标题】:C++ code doesn't compile correctly after adding output file添加输出文件后 C++ 代码无法正确编译
【发布时间】:2013-11-11 02:55:15
【问题描述】:

我已经完成了我的大部分任务,这需要使用到目前为止我已经正确运行的三个功能。问题是当我添加相应的代码以输出到文件时,最后一个函数不返回值,并且我想要输出到文件的值没有写入文件。该过程也以返回-1结束。请看看下面的代码,告诉我我做错了什么。

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

string* returnGreetings() {

    int const SIZE = 50000;
    string message;
    string* greetings = new string[SIZE];

    for (int i = 0; i < SIZE; i++)
    {

    if (i < 12500)
        {
            message = "Hi";
            greetings[i] = message;
        }
    else if (i >= 12500 && i < 25000)
        {
            message = "Hey";
            greetings[i] = message;
        }
    else if (i >= 25000 && i < 37500)
        {
            message = "Hello";
            greetings[i] = message;
        }
    else if (i >= 37500)
        {
            message = "What's up";
            greetings[i] = message;
        }
    }
    return greetings;
}

vector<string> returnVectorGreetings()
{
    string message;
    vector <string> greetings;

    for (int i = 0; i < 50000; i++)
    {

    if (i < 12500)
        {
            message = "Hi";
            greetings.push_back(message);
        }
    else if (i >= 12500 && i < 25000)
        {
            message = "Hey";
            greetings.push_back(message);
        }
    else if (i >= 25000 && i < 37500)
        {
            message = "Hello";
            greetings.push_back(message);
        }
    else if (i >= 37500)
        {
            message = "What's up";
            greetings.push_back(message);
        }
    }


    return greetings;
}

int addTen(int *numberAddress)
{
    return *numberAddress + 10;
}

int main()
{

    int *numberAddress;

    string* address = returnGreetings();

    cout << address;

    string *a = returnGreetings();

    for (int i = 0; i < 50000; i++) cout << a[i] << endl;

    vector<string> m = returnVectorGreetings();

    for (int i = 0; i < 50000; i++) cout << m[i] << endl;

    cout << "Please enter a number: ";

    cin >> *numberAddress;

    cout << "The number plus 10 is: " << addTen(numberAddress) << endl;

    ofstream outfile;
    outfile.open("output.txt");
    outfile << address;
    outfile.close();

    return 0;
}

【问题讨论】:

  • 你从未初始化过numberAddress
  • @Barmar 即使我这样做仍然无法工作
  • 你正在写一个指向文件的指针,而不是数组的内容。
  • open() 返回了什么???并且您如上所述将指针写入文件
  • @Saran-san 我想要的是将数组的地址写入文件。当我调用最后一个函数“addTen”并且我没有打开或初始化文件时,一切正常。如果我初始化文件并打开它,最后一个函数将不起作用。我认为是我调用函数“addTen”并输出到文件的组合。

标签: c++ arrays pointers vector output


【解决方案1】:

就用这个 int *numberAddress = new int;

而不是 int *numberAddress;

在使用该指针之前,您需要为该指针分配内存。

【讨论】:

    【解决方案2】:

    问题在于numberAddress。它没有初始化。

    当您尝试将其与 cin 一起使用并将其传递给 addTen() 时,您的程序可能正在访问无效内存并崩溃。

    尝试将其初始化为指向一个 int 变量,如下所示:

    int naValue;
    int *numberAddress = &naValue; // initialize numberAddress
    

    【讨论】:

    • 这就是我试图用我写的函数来完成的“创建一个接收指向整数的指针的函数。发送整数的地址。使用指针将十添加到整数在函数内。”
    • 啊,我不知道这个要求。对于这种情况,您可以初始化 int *numberAddress 以指向一个整数。 int *numberAddress = &amp;i;
    • 也非常感谢您的帮助
    • 不客气。我应该指出,如果你使用new,你应该在内存用完后总是使用delete,否则你会泄漏内存。这对您的教师可能很重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2021-12-01
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多