C ++:xxx中0x00101890处的未处理异常:0xC0000005:访问冲突读取位置0xcccccccc

时间:2015-11-17 09:46:26

标签: c++ bubble-sort

我遇到了一个无法调试代码的问题。它一直向我显示未处理的异常。

#include <iostream>
#include <stdlib.h>
#include <ctime>

#define max 10

using namespace std;


struct Node{
    int data;
    Node *next;
};

void initNode(Node *tmpHead, int n){
    tmpHead->data =n;
    tmpHead->next =NULL;
}

void displayNodes(Node *cur) {
    cout <<"Data is";
    while(cur){
        cout<< cur -> data << " ";
        cur = cur->next;
    }
    cout << " *\n" <<endl;
}

void addNodes(Node * cur, int n){
    Node *newNode = new Node;
    newNode-> data = n;
    newNode-> next = NULL;

    while( cur -> next){
        cur = cur -> next;
    }
    cur -> next = newNode;
}

int countTotalNodes(Node *cur){
    int count =0;
    while(cur){
        count++;
        cur = cur->next;
    }
    return count;
}





void  main () {
    srand(time(NULL));

    Node* head = new Node;
    int i =0;
    int j= 0;
    initNode ( head, rand() %100); 


    for ( int i = 0; i<max-1; i++)
        addNodes( head, rand() % 100);

    cout << endl;
    cout << "Entered array is: " << endl;
    displayNodes( head); 

    Node* array[max];
    Node* cur= head;
    Node* k;
    for( int j = 0; j<max ; j++) 
    {
        array[i] = cur;
        cur = cur->next;
    }
    for (int i=0; i<max-1; i++) //sorting 
    {
        for(int j=0; j<max-i-1; j++)
        {
            if(array[j]->data > array[j+1]->data)
            {
                k = array[j];
                array[j] = array [j+1];
                array[j+1] = k;
            }
        }
    }
    head = array[0];
    for (int i =0; i<max -1; i++)
        array[i]->next = array[i+1];
    array[max-1]->next = NULL;

    cout <<"Sorted Array is: " <<endl;
    displayNodes( head);


}

我找到了无法运行它的部分

if(array[j]->data > array[j+1]->data)

我试图重新输入它,它仍然给我同样的错误。 尝试了几个不同的电脑,它给了我同样的错误或它崩溃了。

1 个答案:

答案 0 :(得分:2)

您的代码说:

for( int j = 0; j<max ; j++) 
{
    array[i] = cur;
    cur = cur->next;
}

但是使用i作为数组的索引是没有意义的,因为j是循环变量,因此数组包含随机指针,因为它没有正确初始化。

您应该像我刚才那样在调试器中运行代码并逐步完成程序并观察它的作用 - 它使得查找这些内容变得更加容易。