我想知道如何在不使用malloc
和calloc
函数的情况下在C或C ++中以运行时分配内存块。
答案 0 :(得分:6)
在C中,使用malloc
。使用后不要忘记free
。
在C ++中,使用new
并且不要忘记delete
。或者更好的是,如果你想要一个动态数组,请使用std::vector
。
答案 1 :(得分:3)
在C中,使用VLA ...
/* fill an array, allocated dinamically without malloc,
** with 1, 2, 3, 4, ...
** then sum all of the values and print the result */
#include <stdio.h>
void vlaalloc(size_t nmemb, size_t siz, void (*fx) (void *, size_t)) {
unsigned char data[nmemb * siz];
fx(data, nmemb);
}
int arraysum(int *arr, size_t len) {
int val = 0;
for (size_t i = 0; i < len; i++) val += arr[i];
return val;
}
void seq(void *data, size_t len) {
int *arr = data;
for (size_t i = 0; i < len; i++) arr[i] = i + 1;
printf("array sum is %d\n", arraysum(arr, len));
}
int main(void) {
int n;
if (scanf("%d", &n) == 1) {
vlaalloc(n, sizeof (int), seq);
}
}
答案 2 :(得分:2)
答案 3 :(得分:2)
在C中使用malloc()
int *a = malloc (sizeof(int) * block_size);
在C ++中使用new
int *a = new int[block_size];
注意:此代码使用原始指针。 C ++ 11有更好的指针,如unique_ptr
和shared_ptr
。通常优先考虑这些智能指针而不是原始指针。
编辑:OP需要一个块,所以我正在更新代码
答案 4 :(得分:1)
除非我忽略了你的问题,否则你只需要使用C ++语言标准结构:new和delete / delete []。
答案 5 :(得分:0)
在C中你可以使用:
malloc()
在C ++中:
malloc()
calloc()
在C ++中,最好使用new-operator。
答案 6 :(得分:0)
我不确定你的问题,但简单的答案是使用
C:
malloc();
C ++:
new
这将返回指向内存的指针,操作系统将负责为您找到它。
答案 7 :(得分:0)
在C中,所有的内存分配都是通过malloc(规则中的内容)来完成的,所以如果你想要malloc以外的东西,那么它取决于你使用的平台,并且你不需要&#39 ; t。说。
在Linux上,mmap可能会做你想要的。毫无疑问,Windows还有别的东西。
在某些系统上,只要您知道所有内容的位置,您就可以在不询问的情况下抓取它,但这主要仅适用于使用基本(或不使用)操作系统的嵌入式系统。