Tag: malloc

使用malloc分配时是否包含空字符

我已经使用C很长一段时间了,我有这个小问题,我想查询。 假设我想创建一个存储多达1000个字符的字符数组。 现在,当我使用malloc时,我将数组的大小指定为1001个字符[1000个字符+空]或仅1000个? 另外,说我遇到了这个问题,那么我怎么能自己找到这个解决方案的答案,也许是通过使用一些测试程序。 我理解字符串的大小是在没有空字符的情况下计算的,但是当我为它分配内存时,我是否也考虑了空字符?

嵌入式应用程序中的内存管理资源

我应该如何管理关键任务嵌入式应用程序中的内存? 我在谷歌发现了一些文章,但无法确定一个非常有用的实用指南。 DO-178b禁止动态内存分配,但是如何管理内存呢? 提前预先分配所有内容并发送指向需要分配的每个function的指针? 在堆栈上分配它? 使用全局静态分配器(但它与动态分配非常相似)? 例如,答案可以是常规答案,对资源的引用或对良好的开源嵌入式系统的引用。 澄清:这里的问题不在于内存管理是否适用于嵌入式系统。 但是什么是嵌入式系统的优秀设计,以最大限度地提高可靠性。 我不明白为什么静态预分配缓冲池,并动态地获取和删除它,与动态分配内存不同。

C:使用malloc扩展数组

我对malloc和C有点新手。 我想知道如果需要的话我可以用malloc扩展一个固定大小的数组的大小。 例: #define SIZE 1000 struct mystruct { int a; int b; char c; }; mystruct myarray[ SIZE ]; int myarrayMaxSize = SIZE; …. if ( i > myarrayMaxSize ) { // malloc another SIZE (1000) elements myarrayMaxSize += SIZE; } 上面的例子应该说明我想要完成的事情。 (顺便说一句:我需要这个用于我编写的解释器:使用固定数量的变量,如果需要更多变量,只需动态分配它们)

尝试在结构上使用scanf时出现分段错误

我对c很陌生,此刻我也非常沮丧。 这是我的代码: typedef struct { char* fName; char* lName; char* pNum; char* address; char* email; } contactInfo; void addContact(){ contactInfo *contact; contact = (contactInfo *) malloc (sizeof(contactInfo)); printf(“\n[Add a contact]\nFirst Name: “); scanf(“%s”, contact->fName); printf(“%s”, contact->fName); } 出于某种原因,当我输入scanf的值时,它会给我一个分段错误。 如果我尝试在contact-> fName前添加&,我也会收到错误。 代码有什么问题?

最小化malloc()调用的数量可以提高性能?

考虑两个应用程序:一个(num.1)多次调用malloc(),另一个(num.2)调用malloc()几次。 两个应用程序分配相同数量的内存(假设为100MB)。 对于哪个应用程序,下一个malloc()调用会更快,#1还是#2? 换句话说:malloc()在内存中是否有分配位置的索引?

解析$ PATH变量并将目录名保存到字符串数组中

我想解析Linux的$ PATH变量,然后将用’:’分隔的目录名保存到字符串数组中。 我知道这是一个简单的任务,但我被困住了,任何帮助都会很好。 到目前为止我的代码是这样的,但有些东西是不对的。 char **array; char *path_string; char *path_var = getenv(“PATH”); int size_of_path_var = strlen(path_var); path_string = strtok(path_var, “:”); while (path_string != NULL) { ss = strlen(path_string) array[i] = (char *)malloc(ss + 1); array[i] = path_string; //this is actually all i want to do for every path i++; path_string = strtok(NULL, “:”); }

C中的双重自由或腐败3d数组

在释放3d数组时,我遇到了“双重释放或损坏”错误。 任何人都可以告诉我代码中的问题在哪里? arrays的大小为2 * N * N. 这里N的值是100.即使没有铸造,也是相同的结果。 这是代码: // Mallocing double ***h = malloc(2 * (sizeof(double**))); for(i = 0; i < N; i++) { h[i] = malloc(N * sizeof(double*)); for(j = 0; j < N; j++) { h[i][j] = malloc(N * sizeof(double)); } } // Freeing for(i = 0; i < N; i++) { […]

在C中为二维数组分配内存的最佳方法是什么?

从两个角度来看,在C为two-d array分配内存的最佳方法是什么: memory-management和speed ? 另外,哪个更好用,一个two-d array (并为它分配内存)或double pointer ? 有人可以详细解释一下,内部会发生什么,为什么一种方法比另一种更好?

函数调用中的malloc似乎在返回时被释放?

我想我已经把它归结为最基本的情况: int main(int argc, char ** argv) { int * arr; foo(arr); printf(“car[3]=%d\n”,arr[3]); free (arr); return 1; } void foo(int * arr) { arr = (int*) malloc( sizeof(int)*25 ); arr[3] = 69; } 输出是这样的: > ./a.out car[3]=-1869558540 a.out(4100) malloc: *** error for object 0x8fe01037: Non-aligned pointer being freed *** set a breakpoint in malloc_error_break to […]

malloc和calloc之间的使用差异

gcc 4.5.1 c89 我已经编写了这个源代码,以便我更好地理解malloc和calloc。 我理解,但只是有几个问题。 dev = malloc(number * sizeof *devices); 等于这个calloc。 我并不担心清理内存。 dev = calloc(number, sizeof *devices); 与在while循环中执行5次相比,这究竟是什么呢? dev = malloc(sizeof *devices); 我想第一个和第二个是创建一个指向5结构设备的指针。 第三个是创建一个指向结构设备的指针? 我的程序说明了使用valgrind编译和运行的3种不同方法–leak-check = full。 非常感谢任何建议。 #include #include struct Devices { #define MAX_NAME_SIZE 80 size_t id; char name[MAX_NAME_SIZE]; }; struct Devices* create_device(struct Devices *dev); void destroy_device(struct Devices *dev); int main(void) { size_t […]