#include <iostream>
using namespace std;
int a[4];
int main(){
int b=7;
cout<<a[b]<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试图访问未分配的内存.所以我希望输出是一个分段错误,而输出是一些垃圾值.
后来我将'b'增加到1000,现在输出是'Segmentation fault'.这种行为有特定的原因吗?
我正在使用gcc-4.3.2编译器.
我正在编写代码并意识到我可以"访问"与数组大小相同或更大索引的数组元素.为什么这不会产生错误?
例如,
#include <iostream>
using namespace std;
int main ()
{
int b_array[5] = {1, 2, 3, 4, 5};
cout << b_array[5] << endl // Returns 0
<< b_array[66] << endl; // Returns some apparently random value.
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我是C++的新手.我基本上是自学.我遇到了一个我正在练习的Hangman游戏项目.我的问题是随机字生成.
我知道例如,int n=rand()% 10意味着生成0到10范围内的随机数.
现在在游戏中有一个包含10个单词的10个单词的数组.我感到困惑的是,如果从0到10的数字是随机生成的,那么这将是从11个随机数中选择的.但是,该数组只有10个元素(0-9).
当随机发生器选择10时会发生什么?元素10不存在于数组中,对吗?
那么这段代码应该int n=rand()% 9不是吗?
此外,在游戏中选择所有单词之前,是否可以重复相同的单词?那显然不是理想的.如果可以的话,我该如何防止这种情况?
我有以下代码:
string s = "haha";
cout << s << endl; //haha
cout << s.length() << endl; //4
cout << (s[25] == 'h' ? "is h" : "is not h") << endl; //is not h
cout << s[0] << endl; // h
cout << s[25] << endl; // nothing...blank
Run Code Online (Sandbox Code Playgroud)
似乎指向任何索引,即使它超出范围也不会抛出任何错误......这是什么原因?
我目前正在学习C++,直到昨天我遇到了这个叫做数组的新东西.到目前为止我所知道的只是他们可以在某种表格方面保存数据,您可以修改/读取他们持有的数据.
由于我正在尝试使用C++,我想我会尝试打破它,这让我现在就问这个问题.当我尝试从未指定的值读取时,我得到一个数字,我不确定它为什么会被引起.
int lotteryNumbers[5] = {10, 20, 30, 40, 50};
// Yes, I know that the loop count is 5!
for (int loopCount = 0; loopCount <= 5; loopCount++) {
cout << lotteryNumbers[loopCount] << endl;
}
Run Code Online (Sandbox Code Playgroud)
我的输出是;
10
20
30
40
50
13439729 <-- What is this sourcery?!
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感谢指导我学习这种复杂的语言.
谢谢,内森.
编辑:谢谢你的帮助.现在标记为重复.:d
为什么编译器不阻止我使用大于数组长度减一的整数和负整数对数组进行索引?
允许这样做的理由是什么?
我编写了以下程序来搜索给定数组字符串中的特定字符串.我在搜索功能中出错并写了i--而不是i ++.
#include <iostream>
#include <string>
using namespace std;
int search(string S[], int pos, string s)
{
for(int i=0; i<pos; i--) {
cout << i << " : " << S[i] << "\n";
if (S[i] == s) {
cout << "Inside Return ->\n";
cout << i << " / " << S[i] << " / " << s << "\n";
return i;
}
}
return -1;
}
int main()
{
string S[] = {"abc", "def", "pqr", "xyz"};
string s = …Run Code Online (Sandbox Code Playgroud) 你能向我解释一下这种行为吗?这里的代码:
int* b = new int;
const int MAX_AGE = 90;
b = (int*)&MAX_AGE;
std::cout << b << std::endl;
std::cout << &MAX_AGE << std::endl;
std::cout << *b << std::endl;
std::cout << MAX_AGE << std::endl;
std::cout << "........." << std::endl;
*b = 2;
std::cout << *b << std::endl; // HERE I get 2, that's ok
std::cout << MAX_AGE << std::endl; // HERE I still get 90, why?
std::cout << b << std::endl;
std::cout << &MAX_AGE << std::endl;
Run Code Online (Sandbox Code Playgroud) 假设我有以下数组
unsigned char array[5];
Run Code Online (Sandbox Code Playgroud)
所以我试图了解访问中到底什么是未定义的
array[6]
Run Code Online (Sandbox Code Playgroud)
据我了解,编译器将尝试读取内部的值*(array+6),因此它被定义。所以,如果我理解正确的话,未定义的是当你尝试读取未初始化的内存时会发生什么。
如果是这种情况,那么这里的最佳答案说,除非有陷阱表示,否则定义了读取未初始化的值,但我们知道 unsigned char 没有这种表示。
那么这里定义得好吗?它总是会读到吗*(array+6)?
我分配了一个由3个元素组成的int数组,并考虑了以下代码:
int a[3];
for(int i = -2; i < 3; ++i){
a[i] = i;
cout<<a[i]<<" ";
}
Run Code Online (Sandbox Code Playgroud)
这是它的输出:
-2 -1 0 1 2
Run Code Online (Sandbox Code Playgroud)
似乎数组a有5个分配的空间,而a在这些空间的中间。有任何想法吗?