【问题标题】:Unhandled exception. Access violation未处理的异常。访问冲突
【发布时间】:2016-06-04 08:46:13
【问题描述】:

我正在编写一些这样的 C++ 代码:

#include <iostream>
using namespace std;
void swap(int *a, int *b)
{
    int *c = NULL;
    *c = *a;
    *a = *b;
    *b = *c;
}
int main()
{
    int a, b;
    cout << "a, b: ";
    cin >> a;
    cin >> b;
    swap(&a, &b);
    cout << a << b;
    system("pause");
    return 0;
}  

但是编译时,它说:“未处理的异常...访问冲突读取...”。我的代码有什么问题?

【问题讨论】:

  • 嗨!欢迎来到 StackOverflow!虽然这确实不错,但始终建议正确缩进您的代码。我会在一秒钟内为你做这件事。它使代码更易于阅读,并让您更容易发现结构性错误。
  • 想想这意味着什么:*c = *a;
  • 你的英文还不错,只是你拼错了英文:)
  • 另外,你的代码不能同时是c++11c++14。选择一个 - 或者没有,因为这适用于所有版本的 C++
  • 你不应该尝试通过反复试验来学习 C++,这往往会很糟糕。

标签: c++ c++11 c++14 access-violation


【解决方案1】:

您不能像 swap 方法当前那样取消引用 NULL 指针。幸运的是,您实际上并不需要 c 作为指针 - 您只需要一个 int 来存储临时值:

void swap(int *a, int *b)
{
    int c = *a; /* Here */
    *a = *b;
    *b = c;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 2013-11-22
    • 1970-01-01
    相关资源
    最近更新 更多