C++:xxx 中 0x00101890 处未处理的异常:0xC0000005:访问冲突读取位置 0xcccccccc
C++ : Unhandled exception at 0x00101890 in xxx: 0xC0000005: Access violation reading location 0xcccccccc
我遇到了无法调试代码的问题。它一直向我显示未处理的异常。
#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)
我试着重新输入它,但它仍然给我同样的错误。
尝试了几台不同的电脑,它给了我同样的错误或者它崩溃了。
您的代码表示:
for( int j = 0; j<max ; j++)
{
array[i] = cur;
cur = cur->next;
}
但是使用 i 作为数组的索引是没有意义的,因为 j 是循环变量,所以数组包含随机指针,因为它没有正确初始化。
您应该 运行 像我刚才那样在调试器中编写代码,然后单步执行程序并观察它的作用 - 它使查找这些东西变得容易得多。
我遇到了无法调试代码的问题。它一直向我显示未处理的异常。
#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)
我试着重新输入它,但它仍然给我同样的错误。 尝试了几台不同的电脑,它给了我同样的错误或者它崩溃了。
您的代码表示:
for( int j = 0; j<max ; j++)
{
array[i] = cur;
cur = cur->next;
}
但是使用 i 作为数组的索引是没有意义的,因为 j 是循环变量,所以数组包含随机指针,因为它没有正确初始化。
您应该 运行 像我刚才那样在调试器中编写代码,然后单步执行程序并观察它的作用 - 它使查找这些东西变得容易得多。