malloc函数在C中执行动态内存分配,是标准库的一部分。有关malloc的用法,行为和实现的问题,请使用此标记。
我正在学习C,但我仍然是一个菜鸟。 我正在编写一个程序作为动态内存分配的练习,该程序从用户那里获取长度未知的文本并返回没有空格的文本,...
为了在编译时处理大小未知的 3D 数组,我编写了以下有效的程序: #包括 #包括 类型定义结构{ 整数x、y、z; } dim3D_t; 无效
void addWorkerToProject(Worker *worker, Project *project) { 工人->项目= malloc(sizeof (strlen(项目)+1)); 工人->项目[工人->项目计数]->名称=项目->...
malloc(sizeof(char[length])) 不正确吗?
当我在C++中动态分配数组时,我使用以下内容: char* arr = new char[长度]; 所以很自然地,当我开始学习 C 时,我一直使用以下来分配我的字符串: 茶...
我在 C 中有一个函数,可以动态分配缓冲区,该缓冲区被传递给另一个函数来存储其返回值。就像下面的虚拟示例一样: void other_function(浮动,...
我不知道为什么我得到的值是 3490,即使作者说 *p = 3490 应该是错误,因为我们是在 free() 之后执行的。有任何想法吗? #包括 #包括 int 我...
Valgrind:仅对于较大的输入值,地址 0x0 不会被堆栈、分配或(最近)释放
我正在尝试实现 Dijikstra,这是我拥有的图形生成代码 #包括 #包括 #包括 #包括 我正在尝试实现 Dijikstra,这是我拥有的图形生成代码 #include <stdlib.h> #include <stdio.h> #include <limits.h> #include <math.h> #define MAX 300 int main (int argc, char *argv[]){ int v = atoi(argv[1]); int SIZE = v*v; int* adjMatrix = malloc(sizeof(int)* SIZE); graphGeneration(adjMatrix, v); free(adjMatrix); return 0; } void graphGeneration(int* adj, int numV){ int i, j, r; for(i = 0; i< numV; i++){ for(j=0; j < numV; j++){ if(i == j){ adj[i * numV + j] = 0; } else{ r = rand() % MAX; adj[i * numV + j] = r; adj[j * numV + i] = r; } } } } 当我尝试输入 1000 的 v 值时,它似乎工作正常,但是当我尝试输入 v = 10,000+ 的值时,我遇到了段错误(特别是我注意到的数字是 50,000)。运行 valgrind 会导致我在该方法的标题中出现错误。 为了方便起见,重新发布在这里: Invalid write of size 4 at 0x400800: graphGeneration by 0x4006E3: main Address 0x0 is not stack'd, malloc'd or (recently) free'd Access not within mapped region at address 0x0 有人对如何调试这个有任何想法或者这里是否有任何明显的错误? 我也在 valgrind 中注意到了这一点 Warning: silly arg (-7179869184) to malloc() 我不确定这是否相关,但这似乎也是一件奇怪的事情。 看看一些 malloc() 手册:它的参数是 size_t 类型是有原因的。 int 不能保证容纳任何可能的对象大小,size_t 可以。顺便说一句,它是无符号的——负大小没有多大意义。 所以就写吧 size_t SIZE = ((size_t)v) * v; 因为你的 v 是一个 int 你必须通过强制转换参数之一来强制这个乘法作为 size_t 完成。 稍微好一点的方法是将 v 制作为 unsigned long 并使用 strtoul() 代替 atoi()。 然后,在使用之前检查您的malloc()的结果。即使使用正确的大小参数,它仍然可能返回 NULL。如果是这样,这仅仅意味着您当时没有足够的可用内存。 毕竟,使用 v=10000 并假设 int 占用四个字节(这很常见),您已经尝试一次分配 400 MB。 他是中本聪..但是这是构建项目的投资组合 不要试图理解这一点..这会让你很快发疯..
我想邀请2个人加入这个俱乐部,所以有一个教父这样做,他必须邀请这2个人,但是第一个有优先邀请另外2个人,然后第二个有chan.. .
我正在分配一个带有函数指针的结构。显然,我必须在程序结束时释放该结构。但是,释放函数指针会导致未定义的行为。我该怎么做呢?我尝试...
我正在解决一个问题,需要我编写一个返回指向二维整数数组的指针的函数,所以我想了解二维数组或多维数组的内存...
这是我的结构。 类型定义结构{ uint8_t *数据; size_t 尺寸; } 缓冲; 我在我的主函数中像这样初始化它。 缓冲区*数组; 数组 = calloc(255, sizeof(*array)); //
我只是在寻找一种更好的方法来在 C 中动态分配“数组”。我习惯了 C++、Rust 和 Python,在这些语言中你可以只使用向量或列表,并且非常感谢一些反馈...
CS50:我的 malloc 语句最初有效,但在循环多次迭代后显示错误。为什么会出现这种情况?
我正在尝试使用 djb2 哈希算法解决这个 CS50 问题:https://cs50.harvard.edu/x/2024/psets/5/speller/。请参阅下面我的代码。运行代码所需的其他文件可以找到...
如果我的代码是垃圾,我很抱歉,但我想在已经动态分配的字符串上尝试字符串操作,而不会丢失原始指针,这样当我继续并释放时...
出现Segmentation failure(core dumped)的原因是什么?
我使用C语言,并应用动态规划来解决旅行商问题。 ZeroJudge, An Online Judge System For Beginners 上有这样的问题,但是我得到了 Segmentation failure (c...
我一直在开发一个小项目,就在完成间接调用下面的函数后,我开始收到 malloc:损坏的顶部大小错误。我已经使用 Valgrind 来...
Free() 没有清除 glibc 中的 prev_in_use 位
我使用的是带有glibc的linux 64位 ldd(Ubuntu EGLIBC 2.19-0ubuntu6.15)2.19 这是我的代码 int main (int argc , char** argv){ 字符*第一个,*第二个; 首先= malloc(16); 第二个 = ...
我有一个将物品添加到玩家库存中的功能,以及一个显示库存的功能。当尝试显示库存时,它会打印商品的名称,然后我得到一个
我正在使用 Solaris x86 盒子。我的应用程序崩溃并显示以下堆栈跟踪。 fed155f9 realfree (816d878) + 97 fed151be _malloc_unlocked (7e0, 8047eac, 8047e3c, feffb7d8, 8047bac, 809dd6a) + 18c