malloc 相关问题

malloc函数在C中执行动态内存分配,是标准库的一部分。有关malloc的用法,行为和实现的问题,请使用此标记。

为什么 calloc 函数不分配数组?

我正在尝试读取一个文件并用文件中的所有字符填充一个数组。问题是在 while 循环中执行停止并且出现分段错误。这是国际...

回答 1 投票 0

为什么 calloc 函数只分配 1 作为内存大小?

我正在尝试读取一个文件并用文件中的所有字符填充一个数组。问题是在 while 循环中执行停止并且出现分段错误。这是国际...

回答 0 投票 0

如何正确使用 fstat() 函数以及它的限制是什么?

所以我对C很陌生。我用Java做了很多编程,发现学习C很难。 目前我被分配从我们的终端窗口读取一个文件,其中将包含一个

回答 3 投票 0

是否可以释放在 GDB 的用户定义命令中分配的附加进程中的对象?

由 GDB 附加到进程以运行用户定义的命令: gdb 附加`pidof AttachedProcess` 在 GDB 的用户定义命令中通过 malloc 分配对象。分配的对象将通过...

回答 0 投票 0

Lua 定期在 NULL ptr 上免费请求

我有一个相当大的 lua 5.4 脚本在 C++ lua 嵌入器中运行(没有问题)。我还使用了自己的 l_alloc 实现。每当它被调用时,我都会打印 lua 请求的内容: 静态无效*

回答 0 投票 0

当我有 8GB 可用内存时,为什么 malloc(500000000) 返回 NULL?

我最近一直在用 C 进行实验,只是想了解硬件上发生了什么以及编译器在幕后做了什么。当我分配一个大的 amo 时,我的代码一直在崩溃......

回答 2 投票 0

使用结构作为线程参数调用 pthread_create 时出现额外字符

我观察到,当我将一个结构作为参数传递给线程时,该结构的字符串成员在线程内长了几个字符。 所以基本上,在 main 中,s-dev 的长度为 12 个字符。一个...

回答 1 投票 0

C访问冲突读取位置0xFFFFFFFFFFFFFFFF

我目前正在尝试测试我的代码以在列表中添加参与者,但我收到错误 访问冲突读取位置 0xFFFFFFFFFFFFFFFF。 当我尝试释放内存时。 参与者.h #

回答 1 投票 0

sizeof(' ') null terminator as literal 是四个字节,但是为什么在字符串中它只需要一个字节?

在 c ' ' 空终止符中,因为文字需要 4 个字节(因为它在内部只是零)但是为什么在字符数组或字符串中使用时只需要 1 个字节?这个编译器 mag...

回答 1 投票 0

使用 `malloc` 在函数内定义一个数组并返回该数组给出分段错误

我正在尝试从 process.txt 获取输入。所以我做了一个函数来从那个文件中获取这些输入。 process.txt 文件的内容: 2个 3个 4个 c文件: #包括 #包括 我正在尝试从 process.txt 获取输入。所以我做了一个函数来从那个文件中获取这些输入。 process.txt文件的内容: 2 3 4 c文件: #include <stdio.h> #include <stdlib.h> int *takeInput(int *len) { FILE *fp = fopen("process.txt", "r"); fscanf(fp, "%d", len); int *arr = malloc(sizeof(int) * (*len)); for (int i = 0; i < (*len); i++) { fscanf(fp, "%d", &arr[i]); } /* for (int i = 0; i < (*len); i++) { */ /* printf("%d\n", arr[i]); */ /* } */ /* printf("%p\n", arr); */ fclose(fp); return arr; } int main() { int *len; int *arr = takeInput(len); printf("%d\n", *len); return 0; } 运行这个程序给了我Segmentation fault (core dumped)。 我无法在这里检测到错误。 fscanf(fp, "%d", len); 尝试访问不属于它的内存。 声明一个指针不会为指向的数据分配内存。使用自动存储持续时间声明的未初始化指针的内容是不确定的,即它可能指向内存中的任何内容,并且进程取消引用它是无效的。 这里不需要动态内存分配。只需声明一个具有自动存储持续时间的int: int len = 0; /* Or better as: */ size_t len = 0; /* It can't be negative. */ 并将它的地址传递给函数: int *arr = take_input (&len); 分段错误也可能源于读取 NULL 指针,因为 fopen() 的返回值未经检查就传递给了 fscanf()。 如果对fopen() 的调用返回失败,后续操作将读取/写入NULL 指针,这将调用未定义的行为。 if (!fopen ("process.txt", "r")) { perror ("fopen()"); complain (); } malloc() 也是,返回 NULL 表示失败。应该对其进行类似的检查。 关于 len 是使用它的值 len 还是它的地址 &len 存在一些混淆,这导致您将其定义为指针。您应该将 len 定义为类型为 int 的整数。并将其地址传递给fscanf(). 这里是修改版: #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int *takeInput(int *len) { FILE *fp = fopen("process.txt", "r"); if (fp == NULL) { fprintf(stderr, "cannot open %s: %s\n", "process.txt", strerror(errno)); return NULL; } if (fscanf(fp, "%d", len) != 1) { fprintf(stderr, "invalid length\n"); fclose(fp); return NULL; } int *arr = malloc(sizeof(*arr) * (*len)); if (arr == NULL) { fprintf(stderr, "cannot allocate array\n"); fclose(fp); return NULL; } for (int i = 0; i < (*len); i++) { if (fscanf(fp, "%d", &arr[i]) != 1) break; } fclose(fp); return arr; } int main(void) { int len; int *arr = takeInput(&len); if (arr != NULL) { printf("%d\n", len); for (int i = 0; i < len; i++) { printf("%d\n", arr[i]); } free(arr); } return 0; }

回答 2 投票 0

C 中动态结构的内存分配

说我有一个结构 结构图 { 节点*节点[]; } 具有节点 [] 的动态大小。我也有 结构节点 { 字符文件名[40]; 结构节点*链接[]; } 我会知道我有多少链接和节点...

回答 1 投票 0

C malloc 插入到 Hashmap 时内存损坏

我已经创建了自己的 hashmap 实现,但是在尝试插入记录时出现 malloc(): memory corruption 错误。 来自 main.c ... // 工作正常 err = init_hash(num_inds, config->

回答 1 投票 0

ptmalloc导致的性能问题?

我正在测试 std::forward_list 排序性能,生成 1000000 个随机数并插入到 std::forward_list,排序 5 次 #包括 #包括 #include ...

回答 0 投票 0

在 C 中实现原始哈希函数时出现段错误

我正在尝试集成一个相当原始的“散列”功能。我知道它不是密码安全的,它只是为了学习...... 它编译但每次都会出现段错误... 我放第一个

回答 1 投票 0

以下 custommalloc 程序如何以不同的方式运行

我正在尝试编写一个自定义 malloc,我已经从这个 github repo 中获取了参考 https://github.com/FallAngel1337/mymalloc 我正在尝试使用 sbr 制作已分配节点的单个链表...

回答 1 投票 0

有没有办法禁止Linux上的gnu malloc分配一些内存区域?

假设我想为我自己的 mmap 保留一个巨大的内存区域(在我的例子中用于稍后运行我自己的虚拟机)。 通过这种方式,我想确保对 malloc、realloc 等的任何调用都不会

回答 0 投票 0

此代码中的空字符终止存在一些问题

#include #包括 #包括 内部主要(){ char *str = (char*)malloc(4); strcpy(str,“aaab”); 字符 *pt; strcpy(点,海峡);

回答 3 投票 0

数组声明符号是C中malloc的简写吗?

来自本教程网站: 要在 C 中声明一个数组,程序员指定数组的类型 元素和数组所需的元素数量如下 - 类型 arrayName [ arraySize ]; 它...

回答 3 投票 0

如何在不使用指针的情况下将结构传递给函数?

考虑以下程序: #包括 #包括 #包括 #包括 结构人 { 字符 *名称; 年龄; ...

回答 1 投票 0

在现实生活中,C 指针比其他类型更好的例子是什么? / 在什么情况下你需要 malloc()?

在现实生活中你需要什么案例 char *c = "你好,世界!"; 多于 char c[] = "你好,世界!"; 我不仅在谈论你好,世界!但总的来说。 \ 第二题...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.