Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的堆和指针+;_C++_Arrays_Pointers_Heap - Fatal编程技术网

C++ C+中的堆和指针+;

C++ C+中的堆和指针+;,c++,arrays,pointers,heap,C++,Arrays,Pointers,Heap,我有一个关于指针的问题。我的问题是: 编写一个函数int*read_data(int&size),从cin读取数据,直到用户输入Q终止输入。该函数应将size参考参数设置为数字输入的数量。返回指向堆上数组的指针。该数组应该具有精确大小的元素。当然,一开始您不知道用户将输入多少元素。从一个包含10个元素的数组开始,每当数组填满时,将其大小加倍。最后,分配一个大小正确的数组,并将所有输入复制到其中。确保删除任何中间数组 这是我的代码: int* read_data(int& size); i

我有一个关于指针的问题。我的问题是:

编写一个函数
int*read_data(int&size)
,从
cin
读取数据,直到用户输入Q终止输入。该函数应将size参考参数设置为数字输入的数量。返回指向堆上数组的指针。该数组应该具有精确大小的元素。当然,一开始您不知道用户将输入多少元素。从一个包含10个元素的数组开始,每当数组填满时,将其大小加倍。最后,分配一个大小正确的数组,并将所有输入复制到其中。确保删除任何中间数组

这是我的代码:

int* read_data(int& size);
int main()
{
    int size ;
    int* account_pointer = read_data(size);
    int* account_array = new int[size];

    int* bigger_array = new int[2 * size];
    for (int i = 0; i < size; i++)
    {
        bigger_array[i] = account_array[i];
    }
    delete[] account_array;
    account_array = bigger_array;
    size = 2 * size;

    system("PAUSE");
    return 0;
}

int* read_data(int& size)
{
    int input;
    cout << "Enter integer, Q to quit : " ;
    while(cin >> input)
    {
        size++;
    }
    return &size;
}
int*读取数据(int和size);
int main()
{
整数大小;
int*帐户指针=读取数据(大小);
int*account_array=新int[size];
int*biger_数组=新int[2*size];
对于(int i=0;i输入)
{
大小++;
}
回报与规模;
}

但是,我在插入非数字时收到一条错误消息。错误消息是
Debug error!无效的分配大小:4294967295字节
。我是否在main方法中错误地声明了size变量?或者我的整个代码都编错了?

main()
中,您需要将大小初始化为0。没有初始化,其值是未定义的。

因此。。。冒着为他人做学校项目的风险(啊哼),我会这么做:

    #include "stdafx.h"
    #include <iostream>

    int* read_data(int& size);

    int _tmain(int argc, _TCHAR* argv[])
    {
        int size = 0;
        int* result = read_data(size);

        int* end = new int[size];
        for(int i=0;i<size;i++)
            end[i] = result[i];


        for(int i=0;i<size;i++)
            std::cout<<end[i];

        delete []end;
        delete []result;

        return 0;
    }



    int* read_data(int& size)
    {
        int input;

        int arraySize = 10;
        int *arrInt = new int[arraySize];

        std::cout << "Enter integer, Q to quit : " ;
        while(std::cin >> input)
        {        
            arrInt[size++] = input;

            if(size >= arraySize)  //time to resize
            {
                arraySize *= 2;  //double size

                int* arrInt2 = new int [arraySize];

                for(int i=0;i<size;i++)
                {
                    arrInt2[i] = arrInt[i];
                }

                delete [] arrInt;
                arrInt = arrInt2;
            }
        }

        return arrInt;
    }
#包括“stdafx.h”
#包括
int*读取数据(int和size);
int _tmain(int argc,_TCHAR*argv[]
{
int size=0;
int*result=读取数据(大小);
int*end=新的int[size];
对于(int i=0;i
从10的数组开始

大小已声明但未初始化

数组填满时,将大小加倍

此^step应该在read_data(..)中,而不是在main()中,并且应该是自动的

用户通过输入Q终止输入

在您提供的代码片段中,没有测试可能输入的方法

返回指向堆上数组的指针

整数地址绝不是堆上的数组,而且,尽管大小最初未初始化,但在函数返回它后,它返回该变量的地址,因此在执行过程中会出现大量数字,因此程序尝试分配40亿个数字

我在a.t.m.看到的最后一个问题是,您丢弃任何用户输入,而不是将其馈送到任何数组中

所以我的建议是:

移动大小声明和所需的任何变量,包括read_数据中的数组(…)

实际解析输入

使read_data(…)实际返回它应该返回的内容


解决了这些问题,您就应该准备好了。^

ayuelkenbeck的答案回答了您的问题,但请注意,您的实现中还有其他问题。您的代码不符合要求。因此,您从
cin
中读取
input
,然后?您只需将下一个整数读入同一个变量中即可将其丢弃。您不需要将其存储在数组中。@leems我写这个是为了将输入存储到array.int*account\u array[size]=输入;但大小不是常量,因此存在错误。我如何修复它请不要完全更改问题,这会使现有答案无效。我回滚了您的编辑。您可以就您的问题提出另一个问题,或者更确切地说,做些研究,因为以前有一千人遇到过这个确切的问题。那么我该怎么办o修改我的代码?我对我应该做什么也很困惑。ayuelkenbeck的回答是正确的,我只是提出了一个简化代码的想法,并回答了afriza的反对意见。如果你试图计算数字输入的数量,请将大小初始化为0,而不是10。但我认为问题要求我设置eleme首先将数组的nt设置为10。然后,如果到达堆,数组项将加倍?但是如果我在read_数据中声明我的大小,我如何从main调用read_数据,因为我需要再次初始化大小?哦,你是对的!我忘了如果在main中没有定义,你将不知道结果大小,因此你无法访问它…抱歉,我对f不好组织:)