相关疑难解决方法(0)

1730
推荐指数
11
解决办法
54万
查看次数

可以在其范围之外访问局部变量的内存吗?

我有以下代码.

#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

怎么会这样?本地变量的内存不能在其功能之外无法访问吗?

c++ memory-management local-variables dangling-pointer

990
推荐指数
19
解决办法
26万
查看次数

将2D数组传递给C++函数

我有一个函数,我想作为一个参数,一个可变大小的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++ arrays pointers multidimensional-array

294
推荐指数
10
解决办法
59万
查看次数

在没有new的情况下用c ++调用构造函数

我经常看到人们使用C++创建对象

Thing myThing("asdf");
Run Code Online (Sandbox Code Playgroud)

而不是这个:

Thing myThing = Thing("asdf");
Run Code Online (Sandbox Code Playgroud)

这似乎有用(使用gcc),至少只要没有涉及模板.我现在的问题是,第一行是否正确,如果是这样,我应该使用它?

c++

133
推荐指数
4
解决办法
13万
查看次数

在C++中通过引用传递指针的原因?

在哪种情况下你想在c ++中使用这种性质的代码?

void foo(type *&in) {...}

void fii() {
  type *choochoo;
  ...
  foo(choochoo);
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers reference

89
推荐指数
4
解决办法
9万
查看次数

如何发生"堆栈溢出",如何防止它?

如何发生堆栈溢出以及确保它不会发生的最佳方法是什么,或者是哪种方法可以防止,特别是在Web服务器上,但其他示例也会很有趣?

memory stack-overflow

84
推荐指数
8
解决办法
8万
查看次数

C++ 17引入了哪些评估顺序保证?

在典型的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)

c++ operator-precedence c++17

77
推荐指数
2
解决办法
7130
查看次数

'new' 和 'delete' 在 C++ 中被弃用了吗?

我偶然发现了一个涉及不同大小数组声明的测验。我想到的第一件事是我需要对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

68
推荐指数
4
解决办法
2万
查看次数

没有新的C++对象

这是一个非常简单的问题,但我多年来都没有正确地完成c ++,所以我对此感到困惑.此外,在互联网上查找并不是最简单的事情(至少对我而言).

为什么不使用new关键字,它是如何工作的?

基本上,这里发生了什么?

CPlayer newPlayer = CPlayer(position, attacker);
Run Code Online (Sandbox Code Playgroud)

c++ new-operator

63
推荐指数
4
解决办法
4万
查看次数

使用在C++中动态分配的数组有什么问题?

如下代码:

int size = myGetSize();
std::string* foo;
foo = new std::string[size];
//...
// using the table
//...
delete[] foo;
Run Code Online (Sandbox Code Playgroud)

我听说在某些情况下这样的使用(不是这个代码,但是整个动态分配)可能是不安全的,并且只能用于RAII.为什么?

c++ dynamic-allocation

30
推荐指数
3
解决办法
4881
查看次数