Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.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/3/arrays/14.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++_Arrays_Sorting_Pointers_Pointer Arithmetic - Fatal编程技术网

C++ 传递具有访问冲突的数组和指针

C++ 传递具有访问冲突的数组和指针,c++,arrays,sorting,pointers,pointer-arithmetic,C++,Arrays,Sorting,Pointers,Pointer Arithmetic,我正在做一个赋值,它必须为所有函数传递指针 参数。除全局常量外,不允许使用全局变量 我将在main中创建一个“bids”数组,并用readBids()函数填充它。这是可行的,但是我应该把它传递给一个函数来对它进行冒泡排序。调用sortBids函数后,我的程序将中断。我现在正在学习指针,我看不出我做错了什么。调用堆栈提供Project4.exe!main()行32,它指向sortbid(bidArray,numBids) 任何帮助和解释都将不胜感激 #include <iostream&g

我正在做一个赋值,它必须为所有函数传递指针 参数。除全局常量外,不允许使用全局变量

我将在main中创建一个“bids”数组,并用readBids()函数填充它。这是可行的,但是我应该把它传递给一个函数来对它进行冒泡排序。调用sortBids函数后,我的程序将中断。我现在正在学习指针,我看不出我做错了什么。调用堆栈提供
Project4.exe!main()行32
,它指向
sortbid(bidArray,numBids)

任何帮助和解释都将不胜感激

 #include <iostream>
    #include <string>

    using namespace std;

    string* readProductName();
    int* readNumBids();
    double* readBids(string,int);
    void sortBids(double*, int*);
    void averageBid();
    void maxBid();
    void totalBid();
    void printReport();


    int main(){
        string* productName;
        int* numBids;


        productName = readProductName();
        numBids = readNumBids();
        double* bidArray = readBids(*productName, *numBids);
        sortBids(bidArray, numBids);


        cout << *productName << " " << *numBids << endl;
        for (int i = 0; i < *numBids; i++){
            cout << bidArray[i] << endl;
        }
        system("PAUSE");
        delete productName;
        delete numBids;
        delete bidArray;
        return 0;
    }

    string* readProductName(){
        string* productName = new string;
        cout << "\n Please enter a product name\n";
        cin >> *productName;

        return productName;
    }

    int* readNumBids(){
        int* numBids = new int;
        cout << "\n Please enter the number of bids\n";
        cin >> *numBids;

        return numBids;

    }

    double* readBids(string productName, int numBids){
        int* size = new int;
        size = &numBids;
        string* productNamePtr = new string;
        productNamePtr = &productName;

        double *bidArray;
        bidArray = new double[*size];

        cout << "\nHow many bids for the " << *productNamePtr << endl;
        for (int i = 0; i < *size; i++){
            cout << "Please enter bid #" << i + 1 << endl;
            cin >> bidArray[i];
            if (bidArray[i] <= 0){
                cout << "\nPlease enter an amount larger than 0\n";
                i--;
            }
        }
    return bidArray;
}

void sortBids(double* array, int *size){
    bool* swap = bool{ false };
    double* temp = new double;

    do
    {
        *swap = false;
        for (int count = 0; count < *size - 1; count++)
        {
            if (array[count] > array[count + 1])
            {
                *temp = array[count];
                array[count] = array[count + 1];
                array[count + 1] = *temp;
                *swap = true;
            }
        }
    } while (*swap);
}
#包括
#包括
使用名称空间std;
字符串*readProductName();
int*readNumBids();
双*读标(字符串,整数);
无效排序ID(双精度*,整数*);
无效平均报价();
void maxBid();
全部投标无效();
作废打印报告();
int main(){
字符串*productName;
int*numBids;
productName=readProductName();
numBids=readNumBids();
double*bidArray=readBids(*productName,*numBids);
sortbid(bidArray,numBids);

cout问题:

swap
初始化为0。由于
swap
是指向
bool
的指针,因此指针为空

以后,您将取消引用此指针,而不使其指向有效的布尔对象:

   *swap = true;
这是UB,这就是为什么你会得到访问违规

解决方案

您可以将此变量定义为普通对象
bool swap=false;
并在任何地方使用swap。或者正确初始化它
bool*swap=new bool{false};
并在任何地方使用
*swap

其他建议:

注意:bidArray分配了
new[]
,因此您必须
删除[]
它,否则将面临未定义行为的风险

在指针定义中,习惯于将星号放在变量旁边,而不是类型旁边。为什么?因为从光学角度看,它令人困惑:

 bool* a,b;   // defines a pointer to bool a, but a PLAIN BOOL b ! 
 bool  *a,b;  // invites otpically to right interpretation by human reader  

你已经看到太多的java和太少的C++。<代码>新的双;< /Cord>。这是MANNES.必须通过所有函数参数的指针,为什么在地球上?@ LogicStuff,新的双是疯狂的,甚至在爪哇:)@ SergeyA,这是一个在PoTeSts上的练习,只是OP把所有PosiSi排除掉的一个原因,但是它不能解决我的Orgi。Naulover我想摆脱指针,但这是任务的要求。@ sirCRISP这个任务应该教给你什么?讨厌C++?@逻辑对象和它的地址之间的区别?不要忘记?避免Null pTR?或者全部在一起;-)克里斯多夫,但不要在原始类型上。