我正在定义一个大小为9的数组.但是当我访问数组索引10时,它没有给出任何错误.
int main() {
bool* isSeedPos = new bool[9];
isSeedPos[10] = true;
}
Run Code Online (Sandbox Code Playgroud)
我期望得到编译器错误,因为isSeedPos[10]我的数组中没有数组元素.
为什么我没有收到错误?
这是c ++中的for循环.我不明白为什么它不会在执行时给出分段错误.
int main()
{
int arr[5];
for (int x = 0; x <= 5; x++)
{
arr[x] = x;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有以下c代码:
#include <stdint.h>
#include <stdio.h>
int main (){
uint8_t *array;
int i=0;
for(;i<32120;i++)
printf("Array[%d] = %d \n",i,*(array+i));
}
Run Code Online (Sandbox Code Playgroud)
因为我没有为数组声明内存,所以我希望这个代码在第二次迭代时会出现段错误,但情况并非如此(它发生在我的覆盆子上的i == 3295,以及我的debian虚拟机上更大的随机值.
我在这里错过了什么吗?
ps:用gcc版本4.9.2编译(Debian 4.9.2-10)
我有理解这段代码的问题,尤其是"vet-1"部分.这是什么意思?它返回的数组项目是什么?谢谢
#include <stdlib>
#include <iostream>
using namespace std;
void change( int m, int n[7]);
int main(){
int vet[] = {1,2,3,4,5};
change(vet[4],vet-1);
change(0,&vet[4]);
int i=0;
for (i=0;i<5;i++) cout << vet[i];
return 0;
}
void change( int m, int n[7]) {
(*(n+m))--; m++; n--;
}
Run Code Online (Sandbox Code Playgroud) 我是一名 .NET 人员,正在深入研究 C++/微控制器领域。
以下是我正在尝试做的事情的模型。我有一个传入值的方法,并且根据该值我想返回一个不同的硬编码字符串数组。
当我单步执行此操作时,我的函数main()似乎可以工作,并且看起来我正在函数中返回正确的类型。我可以设置一个断点并查看files[0]是否是预期的字符串,files[1]是否是预期的字符串等。我可以单步执行循环并设置监视,files[i]然后我会看到适当的字符串。那里一切都很好。
那么两个问题:如何获取数组中有多少个元素?看了一百万个帖子,看来我做不到,对吧?我是否只需要一些在循环时需要检查的结束字符串(例如空字符串)?
其次,你会注意到我已经注释掉printf()了。当我启用该功能后,在单步执行后printf(),它会更改字符串的内容,但我不明白为什么要这样做。查看逐步执行之前/之后的图像以及手表的结果。我认为这可能是因为字符串没有以 a 隐式终止\0,但这没有效果。
#include <cstdlib>
#include <cstdio>
const char** GetSoundCategory(int category)
{
const char* FILES1[3] = {
"/myfile1.mp3",
"/this_is_my_file.mp3",
"/myfile9.mp3"
};
const char* FILES2[2] = {
"/I love S.E.mp3",
"/please_help_me.mp3"
};
const char** ptr = nullptr;
switch (category)
{
case 1:
ptr = FILES1;
break;
case 2:
ptr = FILES2;
break;
}
return ptr;
}
int main()
{
const …Run Code Online (Sandbox Code Playgroud) 我知道"int*a = new int"用于分配内存以包含int类型的单个元素."int*a = new int [5]"用于分配int类型的元素的块(数组).但是当我运行此代码时
int *a=new int;
for(int i=0;i<4;i++)
a[i]=i;
for(int i=0;i<4;i++)
cout<<a[i]<<endl;
Run Code Online (Sandbox Code Playgroud)
它运行没有任何错误,并显示正确的输出,所以什么时候应该使用"int*a = new int [5]"?或者它们在使用方面是否相同?我在codeblocks中使用gnu c ++编译器.
int main()
{
char *p = new char[100];
strcpy(p, "Test");
cout << "Before heap corruption: " << p << endl;
p[150] = '\0';
cout << "after heap corruption: " << p;
delete p;
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面提到的代码中,我在一个不是我的内存位置写'\ 0',即使这样也没有抛出异常.如果使用注释delete p运行上面的代码,则不会抛出任何异常.但是如果它被取消注释,则抛出附加的异常.因此,删除可验证内存所有权.那么,我是否可以知道eaxctly删除是如何工作的以及为什么在写出内存块时有很多验证

当使用变量num时,我在访问第9个索引时遇到堆栈损坏的错误,但是当我使用任何其他名称访问时,它会出错.请解释我这种含糊不清的地方.
#include<iostream>
#include<iomanip>
using namespace std;
const int SIZE = 9;
class A
{
private:
int num[SIZE];
int num_2[SIZE];
public:
A()
{
for(int i = 1 ; i <= 9 ; i++)
{
num_2[i] = i;
}
}
};
void main()
{
A obj;
}
Run Code Online (Sandbox Code Playgroud) 我一直认为下一个例子是未定义的行为(访问数组越界):
int main()
{
int* a= new int[3];
a[0] = 100;
a++;
unsigned long index = 0;
printf("%d\n", a[-1]);
printf("%d\n", a[index - 1]);
printf("%ul\n", index - 1);
}
Run Code Online (Sandbox Code Playgroud)
然而,这个输出很好:
100
100
4294967295l
Run Code Online (Sandbox Code Playgroud)
为什么下标运算符不会发生下溢?
#include <iostream>
using namespace std;
int main()
{
int lists[30];
lists[30] = 30;
lists[0] = 31;
cout << lists[30];
cout << "\n";
cout << lists[0];
for(int a = 0; a < lists[30]+lists[0]; a++)
{
cout << "\n";
cout << lists[2];
}
}
Run Code Online (Sandbox Code Playgroud)
在for循环之后,它应该只显示列表[2]的值61次; 列表[30] = 30并列出[0] = 31,所以组合它们是61. for循环中的表达式是否有效?它似乎永远循环.
有人可以向我解释,为什么在char tab []中有4个额外的插槽,当我只询问3个?如何摆脱它们?我在Visual Studio 2017中编码.编辑:第一个程序非常基本,没有显示我的意图.所以,有一个扩展的.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int i, n;
vector<char> input;
char chp;
cout << "Enter a expression" << endl;
while (1)
{
cin.get(chp);
if (chp == '\n') break;
input.push_back(chp);
}
n = input.size();
char* tab = new char[n] {};
for (i = 0; i < n; i++)
{
tab[i] = input[i];
}
int l = strlen(tab);
for (int i = 0; i < l; i++)
{
cout << "tab[" << …Run Code Online (Sandbox Code Playgroud)