相关疑难解决方法(0)

如何以编程方式获取Linux上的堆地址

我可以获取堆结尾的地址sbrk(0),但有没有办法以编程方式获取堆的起始地址,而不是通过解析内容/proc/self/maps

c linux heap

9
推荐指数
1
解决办法
7679
查看次数

C是否需要堆栈和堆才能运行?

人们谈论堆栈和堆是什么以及它们之间的差异.但我很想知道如果一个CPU不支持堆栈和堆结构,那么C可以在没有堆栈和堆的情况下正常运行吗?

c heap stack

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

为什么在编译时声明数组大小有限?

例如,我可以做

int *arr;
arr = (int *)malloc(sizeof(int) * 1048575);
Run Code Online (Sandbox Code Playgroud)

但如果没有程序崩溃,我不能这样做:

int arr[1048575];
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

c arrays memory-management local-variables

8
推荐指数
1
解决办法
402
查看次数

我必须在C++中删除静态数组吗?

我写的代码如下:

while(true) {
    int array[5];
    // do something
}
Run Code Online (Sandbox Code Playgroud)

对于循环的每个回合,该数组是一个新数组.我是否需要在循环结束时删除数组?

c++ arrays memory-management

8
推荐指数
1
解决办法
9506
查看次数

使用new运算符创建用户输入大小的数组

我有几个与数组相关的问题.我已经研究过,数组大小必须是常量的,声明/编译器必须知道它的值.但是使用GNU GCC编译器(C++ 11标准过滤器),我能够使用变量作为数组大小完美地编译和运行程序,同时动态声明所述数组(使用new)

int num;
cout << "How big an array? ";
cin >> num;
int *arr = new int [num];
Run Code Online (Sandbox Code Playgroud)

问题1)这被认为是标准吗?我的教授是矛盾的.

Ques2)如果它标准的,那么在创建之后是否可以扩展数组(或任何数组)的大小?

Ques3)同样,如果这个表达式是标准的,那么是否可以在函数中使用它 - 例如.使用函数创建这样的数组?(如果是这样,怎么样?)

(PS:嗨,我是新手,也是C++的新手)

c++ arrays dynamic-allocation

8
推荐指数
1
解决办法
1851
查看次数

为什么堆栈大小有限制?

可能重复:
堆栈和堆的内容和位置

我安装的Ubuntu的默认堆栈大小限制为8 MB.但我很好奇为什么我们需要限制用户程序的堆栈大小.同一个程序可以通过malloc/mmap等使用它的所有4 GB(32位程序)可寻址空间.那么为什么我们需要一个堆栈大小限制呢?为什么堆栈不能增长直到它几乎遇到堆?

stack callstack

7
推荐指数
1
解决办法
6518
查看次数

不能分配超过一百万的整数

我正在尝试时间和比较排序算法.根据我的理解:sizeof(int)是4个字节,因此int array[one million];产生(4)百万字节,大概是4,000 kb或4mb.

那我为什么不能呢?我很确定我还有更多.准确地说是2gb.

如果这意味着什么,我正在使用gcc.

c

7
推荐指数
1
解决办法
6215
查看次数

为什么要使用malloc结构?

为什么我会在没有malloc的情况下完成相同的工作时使用malloc,如下所示.

#include <stdio.h>
#include <conio.h>

struct node {
    int data;
    struct node *l;
    struct node *r;
};

int main(){
    //Case 1
    struct node n1;
    n1.data = 99;
    printf("n1 data is %d\n", n1.data);

    //Case 2
    struct node *n2 = (struct node *) malloc (sizeof(struct node));
    n2 -> data = 4444;
    printf("n2 data is:%d\n",n2 -> data);
    free(n2);

    return (0);
}
Run Code Online (Sandbox Code Playgroud)
  1. 我很难理解未初始化到内存位置的n1如何能够存储数据(99).
  2. 何时使用案例1以及何时使用案例2.

c structure

7
推荐指数
1
解决办法
3268
查看次数

在堆或堆栈上创建的类的本地变量是否未声明为指针?

请考虑以下事项:

A a;

class B; // No content for brevity

class A
{
public:

    A()
    {
         b.SetTitle("hi");
    }

private:

    B b;

}

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是在b内部A声明的是在堆上还是在堆栈上声明.

如果在堆上,这是否意味着它被自动删除或者我也必须删除它?

问题:

这就是我最初的做法,但我认为我有点愚蠢,因为我不得不一直宣称所有的东西都是新的...如果上面是堆栈,我想它不是那么愚蠢吧?

A a;

class B; // No content for brevity

class A
{
public:

    A()
    {
         this->b( new B() ); // I don't have C++ 14 :( so i can't do make_unique
         b->SetTitle("hi");
    }

private:

    unique_ptr<B> b;

}

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

7
推荐指数
1
解决办法
193
查看次数

堆栈和堆在编程语言中

在C99中,以下代码行在堆栈上创建一个变量ptr,它指向堆上的内存区域.

int *ptr = (int*)malloc(sizeof(int)*10);
Run Code Online (Sandbox Code Playgroud)

堆栈和堆的定义在哪里?我在C99语言规范中找不到它们.

堆栈和堆是由操作系统或指令集架构还是其他什么定义的?

另一个相关问题是C#中堆栈和堆的概念是否与C99中的概念完全相同?由于C#代码在.Net框架上运行,我不确定该概念是否与C99相同.

c c# heap stack

7
推荐指数
1
解决办法
188
查看次数