Tag: 内存

使用Visual Studio确定堆栈空间

我在Visual Studio 2005中用C编程。我有一个multithreading程序,但这在这里并不是特别重要。 如何确定(大约)我的线程使用多少堆栈空间? 我计划使用的技术是将堆栈内存设置为某个预定值,比如0xDEADBEEF,运行程序很长时间,暂停程序,并调查堆栈。 如何使用Visual Studio读取和写入堆栈内存? 编辑:例如,参见“如何确定最大堆栈使用量”。 这个问题谈到了嵌入式系统,但在这里我试图在常规PC上确定答案。

使用C调整数组大小

我需要在我正在制作的游戏中拥有一系列结构 – 但我不想将数组限制为固定大小。 我被告知有一种方法可以在需要时使用realloc使数组更大,但找不到任何有用的例子。 有人可以告诉我该怎么做吗?

我应该使用字符串文字来释放char *吗?

我应该在使用字符串文字初始化时释放char*变量吗? 对我来说,语法会让我假设它们只是堆栈分配,但这个例子告诉我,它们不是。 #include #include static char* globalBuffer; typedef struct Container { char* buffer; } Container; Container* Container_new(char* buffer) { Container* container = malloc(sizeof(Container)); container->buffer = buffer; globalBuffer = buffer; return container; } void Container_print(Container* container) { if (container->buffer != NULL) { printf(container->buffer); printf(“\n”); } else { printf(“Container contains a NULL-buffer.”); } } Container* stage() { […]

动态分配C中的数组数组

我并不真正理解C中的一些基本内容,比如动态分配数组数组。 我知道你可以这样做: int **m; 为了声明一个二维数组(随后将使用一些* alloc函数分配)。 也可以通过*(*(m + line) + column) “轻松”访问它。 但是我应该如何为该数组中的元素赋值? 使用gcc以下语句m[line][column] = 12; 因故障而失败。 任何文章/文档将不胜感激。 🙂

如果在C中更改指针,将释放多少内存?

假设有20个内存块,指针p指向第一个块。 现在,当我这样做时: p++; free(p); 将释放多少块内存,为什么?

为什么你想要在堆而不是堆栈上分配内存?

可能重复: 何时最好使用堆栈而不是堆,反之亦然? 我已经阅读了关于堆与堆栈的其他一些问题,但它们似乎更关注堆/堆栈的作用而不是使用它们的原因。 在我看来,堆栈分配几乎总是首选,因为它更快(只需移动堆栈指针而不是在堆中查找空闲空间),并且在完成使用后不必手动释放已分配的内存。 我可以看到使用堆分配的唯一原因是,如果要在函数中创建对象,然后在函数作用域之外使用它,因为堆栈分配的内存在从函数返回后自动取消分配。 是否有其他原因使用堆分配而不是我不知道的堆栈分配?

如何在内存失败时处理realloc?

问题说明了这一切,但这里是一个例子: typedef struct mutable_t{ int count, max; void **data; } mutable_t; void pushMutable(mutable_t *m, void *object) { if(m->count == m->max){ m->max *= 2; m->data = realloc(m->data, m->max * sizeof(void*)); } // how to handle oom?? m->data[m->count++] = object; } 如何处理内存耗尽而不是所有数据的NULL? 编辑 – 让我们假设有一些事情可以做,例如在某处释放一些内存或者至少告诉用户“你不能那样做 – 你的内存不足”。 理想情况下,我想留下那里分配的东西。

为数组使用动态内存分配

我怎么应该为数组使用动态内存分配? 例如,下面是一个数组,其中我从.txt文件中读取单个单词并在数组中逐字保存: 码: char words[1000][15]; 这里1000定义了数组可以保存的单词数,每个单词可以包含不超过15个字符。 现在我希望该程序应该为它计算的单词数量动态分配内存。 例如,.txt文件可能包含大于1000的单词。现在我希望程序应该计算单词数并相应地分配内存。 由于我们不能使用变量代替[1000],因此我对如何实现逻辑完全空白。 请帮助我这方面。

通过指针从C和C ++中的函数返回本地数据

我跟朋友争吵了。 他说我可以从函数返回指向本地数据的指针。 这不是我所学到的,但我找不到反对他来certificate我的知识的反驳。 这是一个例子: char *name() { char n[10] = “bodacydo!”; return n; } 它用作: int main() { char *n = name(); printf(“%s\n”, n); } 他说这是完全可以的,因为在一个程序调用name后,它会返回一个指向n的指针,然后就会打印它。 同时程序中没有其他任何事情发生,因为它是单线程的,执行是串行的。 我找不到反驳的论点。 我永远不会写那样的代码,但他很顽固,并说这完全没问题。 如果我是他的老板,我会解雇他是一个顽固的白痴,但我找不到反驳的论点。 另一个例子: int *number() { int n = 5; return &n; } int main() { int *a = number(); int b = 9; int c = […]