我有以下代码.
#include <iostream>
int * foo()
{
int a = 5;
return &a;
}
int main()
{
int* p = foo();
std::cout << *p;
*p = 8;
std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)
而代码只是运行而没有运行时异常!
输出是 58
怎么会这样?本地变量的内存不能在其功能之外无法访问吗?
我有一个函数,我想作为一个参数,一个可变大小的2D数组.
到目前为止我有这个:
void myFunction(double** myArray){
myArray[x][y] = 5;
etc...
}
Run Code Online (Sandbox Code Playgroud)
我在代码中的其他地方声明了一个数组:
double anArray[10][10];
Run Code Online (Sandbox Code Playgroud)
但是,调用myFunction(anArray)
给了我一个错误.
当我传入数组时,我不想复制数组.所做的任何更改都myFunction
应该改变数据的状态anArray
.如果我理解正确,我只想作为参数传入指向2D数组的指针.该函数还需要接受不同大小的数组.例如,[10][10]
和[5][5]
.我怎样才能做到这一点?
我经常看到人们使用C++创建对象
Thing myThing("asdf");
Run Code Online (Sandbox Code Playgroud)
而不是这个:
Thing myThing = Thing("asdf");
Run Code Online (Sandbox Code Playgroud)
这似乎有用(使用gcc),至少只要没有涉及模板.我现在的问题是,第一行是否正确,如果是这样,我应该使用它?
在哪种情况下你想在c ++中使用这种性质的代码?
void foo(type *&in) {...}
void fii() {
type *choochoo;
...
foo(choochoo);
}
Run Code Online (Sandbox Code Playgroud) 如何发生堆栈溢出以及确保它不会发生的最佳方法是什么,或者是哪种方法可以防止,特别是在Web服务器上,但其他示例也会很有趣?
在典型的C++代码中,C++ 17评估顺序保证(P0145)投票的含义是什么?
对于像这样的事情,它有什么变化
i=1;
f(i++, i)
Run Code Online (Sandbox Code Playgroud)
和
std::cout << f() << f() << f() ;
Run Code Online (Sandbox Code Playgroud)
要么
f(g(),h(),j());
Run Code Online (Sandbox Code Playgroud) 我偶然发现了一个涉及不同大小数组声明的测验。我想到的第一件事是我需要对new
命令使用动态分配,如下所示:
while(T--) {
int N;
cin >> N;
int *array = new int[N];
// Do something with 'array'
delete[] array;
}
Run Code Online (Sandbox Code Playgroud)
但是,我看到其中一种解决方案允许以下情况:
while(T--) {
int N;
cin >> N;
int array[N];
// Do something with 'array'
}
Run Code Online (Sandbox Code Playgroud)
经过一番研究,我读到 g++ 允许这样做,但它让我一直在思考,在哪些情况下有必要使用动态分配?还是编译器将其翻译为动态分配?
包括删除功能。但是请注意,这里的问题与内存泄漏无关。
c++ arrays dynamic-memory-allocation static-memory-allocation
这是一个非常简单的问题,但我多年来都没有正确地完成c ++,所以我对此感到困惑.此外,在互联网上查找并不是最简单的事情(至少对我而言).
为什么不使用new
关键字,它是如何工作的?
基本上,这里发生了什么?
CPlayer newPlayer = CPlayer(position, attacker);
Run Code Online (Sandbox Code Playgroud) 如下代码:
int size = myGetSize();
std::string* foo;
foo = new std::string[size];
//...
// using the table
//...
delete[] foo;
Run Code Online (Sandbox Code Playgroud)
我听说在某些情况下这样的使用(不是这个代码,但是整个动态分配)可能是不安全的,并且只能用于RAII.为什么?