抛出异常:写访问冲突 C++
Exception thrown: Write access violation C++
我想用数字 2 4 6 8 10 12 14 16 18 20 填充 (obj * m)。在 Microsoft Visual Studio Professional 2019 中我收到此错误:“抛出异常:写入访问冲突”在行“n-> val = data;”或第 15 行。但后来我进入 DEV C++ 应用程序,在那里我意识到错误是什么,由于某种原因重复开始并且数组通常恶化,粗略地说,不计算初始元素。通过运行这个程序,你会看到一切,我把它带到那里,一切都清晰可见。
#include <iostream>
using namespace std;
class obj{
public:
int val, k;
obj* next;
obj* n;
int current = 0;
void func(int data){
for(n = this, k=0; k<current; n = n->next,k++){
cout<<"k= "<<k<<" = "<<n<<" = "<<n->val<<" curr= "<< current<<", ";
}
cout<<endl;
n->val = data;
current++;
}
void print(){
for(n =this, k = 0; k<10;n = n->next,k++)
{
cout<<n->val<<" ";
}
}
};
int main() {
obj *m;
m=new obj [100];
for(int i=2; i<=20;i+=2)
{
m->func(i);
}
m->print();
delete[] m;
cout << endl;
return 0;
}
在您的代码中,next
未初始化,因此 n
在 func
的迭代过程中指向错误的地址
int main()
{
/* ... snipped ... */
/* Initialize `next` */
for (int i = 1; i < 100; i++)
{
m[i - 1].next = &m[i];
}
m[99].next = nullptr;
/* snipped */
}
我想用数字 2 4 6 8 10 12 14 16 18 20 填充 (obj * m)。在 Microsoft Visual Studio Professional 2019 中我收到此错误:“抛出异常:写入访问冲突”在行“n-> val = data;”或第 15 行。但后来我进入 DEV C++ 应用程序,在那里我意识到错误是什么,由于某种原因重复开始并且数组通常恶化,粗略地说,不计算初始元素。通过运行这个程序,你会看到一切,我把它带到那里,一切都清晰可见。
#include <iostream>
using namespace std;
class obj{
public:
int val, k;
obj* next;
obj* n;
int current = 0;
void func(int data){
for(n = this, k=0; k<current; n = n->next,k++){
cout<<"k= "<<k<<" = "<<n<<" = "<<n->val<<" curr= "<< current<<", ";
}
cout<<endl;
n->val = data;
current++;
}
void print(){
for(n =this, k = 0; k<10;n = n->next,k++)
{
cout<<n->val<<" ";
}
}
};
int main() {
obj *m;
m=new obj [100];
for(int i=2; i<=20;i+=2)
{
m->func(i);
}
m->print();
delete[] m;
cout << endl;
return 0;
}
在您的代码中,next
未初始化,因此 n
在 func
int main()
{
/* ... snipped ... */
/* Initialize `next` */
for (int i = 1; i < 100; i++)
{
m[i - 1].next = &m[i];
}
m[99].next = nullptr;
/* snipped */
}