0

我是 C++ 新手。我通常用 C# 编程,所以我在使用数组和循环时遇到了麻烦。当我尝试使用循环打印动态数组的内容时,它说请求的区域已损坏...例如,我将让它识别与数组内容一起使用的条件,但不打印它的内容:

// Array.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
void main()
{
    int size=3;
    int *p;
    int myarray[10];
    myarray[3]=4;
    p=new int[size];
    p[2]=3;
    if(myarray[3]==4){
        cout << myarray[3] +"/n";
        cout << "Why?";
    }
    else
        cout << "Not equal " << endl;
    cin.get();
    delete [] p;
}
4

3 回答 3

7

代码看起来不错,除非它应该是

cout << myarray[3]  << "\n";

不是 +

于 2012-07-02T17:54:29.840 回答
0

问题是myarray[3] +"\n"

“\n”表示字符串“\n”的内存位置。您正在尝试将 4 添加到该位置并打印它。如果您正在访问受保护的内存位置,这应该会给您垃圾数据或硬件异常(导致核心转储)。

为了得到(我认为)你要求做的事情,

cout << myarray[3] << '\n'

于 2012-07-02T17:58:25.853 回答
-1

虽然给出了解决方案:

cout << myarray[3] << "\n"

要得到的一点是 myarray[3] 是一个整数,而 "\n" 是一个字符串,将它们作为字符串“添加”在一起的唯一方法是首先将整数变成一个字符串。<< 运算符将处理将 myarray[3] 转换为字符串的工作,没什么特别的,然后第二个 << 在它之后抽出一个新行。我个人更喜欢这样的代码,并且发现它更灵活,但在这个学习阶段,你可能会寻找更多:

printf("%i\n", myarray[3]);

其中printf搜索标志并将其他参数作为字符串加载并在一个命令中输出。

于 2012-07-02T18:19:26.990 回答