malloc 相关问题

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

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

为什么 free() 不起作用?

每次我将输入存储在 char* 中分配的空间之上时,我都会遇到 free() 错误。错误如下: *** ./input' 中的错误:free():下一个大小无效(快速):0x09713008 *** 当我重新...

回答 2 投票 0

使用malloc分配内存时如何获取null

身体: 我正在开发 C 代码库,需要编写一个测试用例来处理 malloc 在 s21_create_matrix 函数中返回 NULL 的场景。以下是代码的相关部分: 整数

回答 1 投票 0

如何在 C++ 中使用 FFTW3 创建场向量?

我正在将 FFTW3 与 OpenMPI 结合使用,并且我想要一个能够执行 FFTW 变换的场向量。有了代码就更清楚了: #包括 #包括 ...

回答 1 投票 0

为什么 malloc(LLONG_MAX) 会抱怨,而 malloc(ULLONG_MAX) 却不会?

案例1: #包括 #包括 int main() { void *mem = malloc(ULLONG_MAX); /* 或 ULONG_MAX */ 返回0; } 案例2: #包括 #包括<

回答 1 投票 0

在 C 中以指数形式添加两个多项式

问题是添加两个用户定义的多项式数据类型。我的代码如下。我尝试编写一个代码,通过使用 malloc 创建动态数组,仅占用必要的内存。 请...

回答 2 投票 0

内存竞技场和内存池有什么区别?

我见过这两个术语用于内存分配器的包装器,它们之间有什么区别? (如果有的话)

回答 3 投票 0

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