相关疑难解决方法(0)

堆栈和堆的内容和位置是什么?

编程语言书籍解释了在堆栈上创建了值类型,并且在堆上创建了引用类型,而没有解释这两者是什么.我还没有看清楚这个问题.我理解堆栈是什么.但,

  • 它们在哪里和它们(物理上在真实计算机的记忆中)?
  • 它们在多大程度上受操作系统或语言运行时控制?
  • 它们的范围是什么?
  • 是什么决定了它们的大小?
  • 是什么让一个更快?

language-agnostic heap stack memory-management dynamic-memory-allocation

7847
推荐指数
27
解决办法
145万
查看次数

什么时候应该在C中使用malloc,什么时候不使用?

我理解malloc()是如何工作的.我的问题是,我会看到这样的事情:

#define A_MEGABYTE (1024 * 1024)

char *some_memory;
size_t size_to_allocate = A_MEGABYTE;
some_memory = (char *)malloc(size_to_allocate);
sprintf(some_memory, "Hello World");
printf("%s\n", some_memory);
free(some_memory);
Run Code Online (Sandbox Code Playgroud)

为简洁起见,我省略了错误检查.我的问题是,你不能通过初始化指向内存中某些静态存储的指针来做到这一点吗?也许:

char *some_memory = "Hello World";
Run Code Online (Sandbox Code Playgroud)

在什么时候你真的需要自己分配内存而不是声明/初始化你需要保留的值?

c memory memory-management

91
推荐指数
6
解决办法
7万
查看次数

使用C-string:"返回与本地变量关联的堆栈内存的地址"

我不是C程序员,所以我不熟悉C-string但新的我必须使用C库,所以这里是我的代码的缩短版本来演示我的问题:

char** ReadLineImpl::my_completion () {

    char* matches[1];


    matches[0] = "add";

    return matches;

}
Run Code Online (Sandbox Code Playgroud)

我收到警告:

警告 - 与返回的本地变量"matches"关联的堆栈内存的地址

我的应用程序似乎没有正常工作(可能是因为这个警告).

什么是警告,是否会引起任何问题?

c++ pointers c-strings

23
推荐指数
2
解决办法
5万
查看次数

为什么在我可以定义一个可变长度数组时使用malloc()?

我正在阅读有关在C中动态创建数组的信息.所以正如我所描述的那样:

int n;
scanf("%d", &n);
int *arr = (int*)malloc(n*sizeof(int));
Run Code Online (Sandbox Code Playgroud)

但后来我想如果我能做这样的事 -

int n, i, sum=0;
scanf("%d", &n);
int arr[n];
Run Code Online (Sandbox Code Playgroud)

我编译并运行它没有任何错误.所以,我的问题是我为什么要使用malloc()?这是否与旧版和新版C有关?

c arrays

5
推荐指数
1
解决办法
403
查看次数