相关疑难解决方法(0)

示例C++测试

我即将参加C++考试.但我只得到一个裂缝,超过85%.如果我不推翻那个,那我就没有得到这份工作.

这些测试的问题在于它们通常以通用C++为目标,并且根据您使用的库,您的泛型定义可能会有所不同.STL和Boost对某些人来说似乎是合乎逻辑的(并且应该是大多数人的一部分)但是我在使用模板之前已经与MFC合作多年.当您有权访问CArray时,为什么要使用> vector>?(修辞问题)

如果您使用过对话框,则表示您没有使用过stdio.如果您使用过Borland产品,那么您就没有使用过MFC.如果您使用过Palm,那么您还没有使用过文件系统,而且您肯定没有使用过CFile.

好的,所以这是问题......

鉴于我想通过85%,我正在进行"通用"C++的在线测试.那么...... 有没有可以去寻找测试的地方? 越多越好.在测试期间或之后,正确的答案也是好的.只要我能从错误中吸取教训.

编辑:如果你的答案没有测试的链接,一些C++问题,或一些面试问题...你错过了我可以去寻找测试的地方吗?

很好的例子..我刚刚发现了这个问题.
以下代码片段打印什么? cout << setw(6) << setfill('#') << "Hello";
我已经编码了9年.并且从未使用过cout,setwsetfill曾经.不是大学毕业.

c++ testing

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

什么是C++中的动态内存分配?

我学习用C动态内存分配++和关键字newnew[]被提及.据说,用户可以在运行时指定内存分配的大小,而不像在源代码中声明一个具有固定大小的变量或数组.

我不明白这个概念.它是如何工作的?我只需要澄清这个想法,一个例子会有所帮助!

c++ malloc memory-management new-operator dynamic-allocation

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

在C++中malloc/free和new/delete兼容性?

还有的malloc /自由和新的一个很好的比较/删除这里,好解释如何malloc()和free()的工作在这里.显然,我们不会混用它们 - 免费使用new或使用malloc删除.

我们可以看到许多开源项目,有许多贡献者,使用这两种机制,同时尊重上述"无混合"规则.通常,在一个文件中只有一种方式(一个作者,一个偏好).我已经分叉了这样一个项目,我正在使用new/delete添加一些功能.但我遇到了一些奇怪的记忆腐败.当然,我可能对他们负责,但.....

这让我想问一些"天真"的问题:

  1. 我可以在同一个编译单元(*.o)中同时使用malloc/free和new/delete机制 - 当然,尊重"无混合"规则?

  2. 我可以交错两种机制,就像在这段代码中一样吗?

    int *a = (int *) malloc (1000 * sizeof int);
    
    int *b = new int[1000];
    
    // some code
    
    free a;
    
    delete[] b;
    
    Run Code Online (Sandbox Code Playgroud)

c++ malloc free new-operator delete-operator

4
推荐指数
1
解决办法
3978
查看次数

使用“ new”的c ++动态内存分配

我是C ++的新手,尝试自己学习(我有Java背景)。

我可以使用分配这种动态内存分配的概念(例如)new

在C(也包括C ++),我得mallocrealloc正在这样做。在C ++中,new由于某些我不了解的原因,他们添加了。

我已经读了很多关于普通数组进入堆栈而动态分配数组进入堆之间的区别。

所以我的理解是,通过使用new我在堆中分配空间,比如说完成一个函数,该空间不会自动删除,但是会一直保留到我最终手动释放它的位置。

我找不到在普通内存上使用动态内存分配的实际示例。

  1. 有人说,使用普通数组时无法在运行时分配内存。好吧,可能我不太了解它,因为当我尝试创建一个普通数组(不带new)时,其容量由用户输入(例如arr[input]),它可以正常工作。

这是我的意思:

int whatever;
cin>>whatever;

int arr2[whatever];

for (int i = 0; i < whatever; i++) {
    arr2[i]=whatever;
    cout<<arr2[i];

}
Run Code Online (Sandbox Code Playgroud)
  1. 当扩展数组容量的唯一方法是将其复制到new更大的数组中时,我并不真正理解为什么将其称为动态的。

我知道Vector类(我还没有学习过)要好用得多。但是,我仍然不能离开知识鸿沟,我必须理解为什么准确地称它为动态,为什么我应该使用它而不是普通数组。当我无法真正扩展内存而只能将其复制到新阵列时,为什么还要手动释放内存呢?

c++ memory-management

4
推荐指数
1
解决办法
2053
查看次数

非托管C++垃圾收集帮助

我是一名.net程序员,对非托管代码没有多少经验.我一直在为一个非托管项目添加修改和添加,一切都运行得很好.你能否就我在垃圾收集方面需要关注哪种代码/对象给出一些指示?

TIA

c++ com garbage-collection unmanaged

3
推荐指数
2
解决办法
415
查看次数

什么时候需要进行显式的析构函数调用?

是否有任何可能的情况,使用标准new/ delete是不够的,我们需要显式调用析构函数,如pA->~A()

我认为这在某些资源管理课程中是必要的,但通常是个坏主意.析构函数在作用域结束时自动调用,为什么我要自己显式调用它?

一个例子的解释会很棒!

c++ destructor scope

3
推荐指数
2
解决办法
170
查看次数

何时使用Malloc而不是New

重复:在什么情况下我使用malloc vs new?

重新阅读这个问题:
C++中"new"和"malloc"和"calloc"有什么区别?

我检查了答案,但没有人回答这个问题:

  • 我何时会使用malloc而不是new?

有几个原因(我可以想到两个).
让最好的浮动到顶部.

c++ malloc new-operator dynamic-memory-allocation

2
推荐指数
1
解决办法
8965
查看次数

关于C++中地址空间的问题

请阅读以下C++代码和结果.根据一些维基页面,静态,自动和动态分配的变量分配在不同的地址空间中,即数据段,堆栈和堆.但是,在我看来,静态和动态变量的地址大致相同.为什么会这样?我怎么知道静态变量真的在数据段中,而不是在堆中?

一个更广泛的问题是,在C++中是否有可能知道每个地址空间的范围(或可用大小)?

我的另一个问题是为什么volatile变量的地址是1?

#include <iostream>
using namespace std;
static int i;
int main() {
    cout << sizeof(int*) << endl;
    int j;
    int* k = new int[10];
    volatile int l;

    cout << &i << endl;
    cout << &j << endl;
    cout << k << endl;
    cout << &l << endl;

    delete[] k;
}
Run Code Online (Sandbox Code Playgroud)

结果:

8
0x1000010e4
0x7fff5fbff66c
0x100100080
1
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
1814
查看次数

C++:请求超过2GB的内存

我有以下代码:

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

typedef uint64_t     Huge_num;  // 8 bytes
typedef Huge_num *   Huge_Arr; // Array of 8 byte elements

using namespace std;

// Function: Return a huge array
static Huge_Arr* requestMem(int n)
{
   cout << "requesting :" 
        << (sizeof(Huge_num)*n)/(1024*1024*1024) 
        << "GB" << endl;

   Huge_Arr *buff;
   try {
      buff = new Huge_Arr[n];
   }
   catch (bad_alloc){
      cout << "Not enough mem!" << endl; 
      exit(-1);
   }
   return buff;
}

// Main
int main(){
    for (int i=1; i< …
Run Code Online (Sandbox Code Playgroud)

c++ memory memory-management

2
推荐指数
1
解决办法
2970
查看次数

初始化`int * p = malloc(1000);`也可以用RAII风格处理吗?

我从 RAII 了解到的是,每当您需要手动分配内存时,new您也需要释放它。因此,与其手动释放它,不如创建带有构造函数和析构函数的类来完成这项工作。

那么,下面的人在谈论什么?

出自:术语的含义——资源获取即初始化

问题是 int * p = malloc(1000); 也是(整数)对象的初始化,但这不是我们在 RAII 上下文中所指的那种初始化。...

@弗雷德:确实如此。int* 不是 RAII 类型,因为它不进行清理。所以这不是 RAII 的意思,即使它是 RAII 字面上的意思。

好吧,我知道malloc在 C 中使用,并且new在 C++ 中使用。

c++ raii

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