malloc 相关问题

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

C动态内存分配

我正在学习C,但我仍然是一个菜鸟。 我正在编写一个程序作为动态内存分配的练习,该程序从用户那里获取长度未知的文本并返回没有空格的文本,...

回答 3 投票 0

如何将分配的数组(运行时已知的大小)放入结构中?

为了在编译时处理大小未知的 3D 数组,我编写了以下有效的程序: #包括 #包括 类型定义结构{ 整数x、y、z; } dim3D_t; 无效

回答 2 投票 0

C 结构数组中的动态内存分配

void addWorkerToProject(Worker *worker, Project *project) { 工人->项目= malloc(sizeof (strlen(项目)+1)); 工人->项目[工人->项目计数]->名称=项目->...

回答 1 投票 0

malloc(sizeof(char[length])) 不正确吗?

当我在C++中动态分配数组时,我使用以下内容: char* arr = new char[长度]; 所以很自然地,当我开始学习 C 时,我一直使用以下来分配我的字符串: 茶...

回答 1 投票 0

指向函数内部动态分配缓冲区的静态指针

我在 C 中有一个函数,可以动态分配缓冲区,该缓冲区被传递给另一个函数来存储其返回值。就像下面的虚拟示例一样: void other_function(浮动,...

回答 2 投票 0

从手动分配的内存中释放指针后,我可以为指针赋值

我不知道为什么我得到的值是 3490,即使作者说 *p = 3490 应该是错误,因为我们是在 free() 之后执行的。有任何想法吗? #包括 #包括 int 我...

回答 1 投票 0

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 投票 0

创建数组时的分配问题

我想邀请2个人加入这个俱乐部,所以有一个教父这样做,他必须邀请这2个人,但是第一个有优先邀请另外2个人,然后第二个有chan.. .

回答 1 投票 0

我不知道该怎么办了

我想邀请2个人加入这个俱乐部,所以有一个教父这样做,他必须邀请这2个人,但是第一个有优先邀请另外2个人,然后第二个有chan.. .

回答 1 投票 0

如何释放带有函数指针成员的结构体?

我正在分配一个带有函数指针的结构。显然,我必须在程序结束时释放该结构。但是,释放函数指针会导致未定义的行为。我该怎么做呢?我尝试...

回答 1 投票 0

C 中二维数组的内存分配,使用 malloc。释放和指针

我正在解决一个问题,需要我编写一个返回指向二维整数数组的指针的函数,所以我想了解二维数组或多维数组的内存...

回答 1 投票 0

将其中一个字段是另一个数组的结构数组传递给函数

这是我的结构。 类型定义结构{ uint8_t *数据; size_t 尺寸; } 缓冲; 我在我的主函数中像这样初始化它。 缓冲区*数组; 数组 = calloc(255, sizeof(*array)); //

回答 1 投票 0

我应该如何在 C 函数内部动态分配内存?

我只是在寻找一种更好的方法来在 C 中动态分配“数组”。我习惯了 C++、Rust 和 Python,在这些语言中你可以只使用向量或列表,并且非常感谢一些反馈...

回答 1 投票 0

CS50:我的 malloc 语句最初有效,但在循环多次迭代后显示错误。为什么会出现这种情况?

我正在尝试使用 djb2 哈希算法解决这个 CS50 问题:https://cs50.harvard.edu/x/2024/psets/5/speller/。请参阅下面我的代码。运行代码所需的其他文件可以找到...

回答 1 投票 0

是否可以在C中使用memmove移走的内存上进行写入?

如果我的代码是垃圾,我很抱歉,但我想在已经动态分配的字符串上尝试字符串操作,而不会丢失原始指针,这样当我继续并释放时...

回答 2 投票 0

出现Segmentation failure(core dumped)的原因是什么?

我使用C语言,并应用动态规划来解决旅行商问题。 ZeroJudge, An Online Judge System For Beginners 上有这样的问题,但是我得到了 Segmentation failure (c...

回答 1 投票 0

malloc“损坏的顶部大小”错误的未知原因

我一直在开发一个小项目,就在完成间接调用下面的函数后,我开始收到 malloc:损坏的顶部大小错误。我已经使用 Valgrind 来...

回答 1 投票 0

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); 第二个 = ...

回答 1 投票 0

是否需要使用外部嵌套结构作为 malloc 的参数?

我有一个将物品添加到玩家库存中的功能,以及一个显示库存的功能。当尝试显示库存时,它会打印商品的名称,然后我得到一个

回答 1 投票 0

如何使用watchmalloc进行后台进程

我正在使用 Solaris x86 盒子。我的应用程序崩溃并显示以下堆栈跟踪。 fed155f9 realfree (816d878) + 97 fed151be _malloc_unlocked (7e0, 8047eac, 8047e3c, feffb7d8, 8047bac, 809dd6a) + 18c

回答 2 投票 0

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