malloc 相关问题

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

我怎样才能同时返回并释放内存

我有一个函数,它分配内存,然后用数据填充它,然后返回它。 我想释放这个分配的内存,但如果我在返回之前释放它,它将返回 null,如果我尝试释放...

回答 2 投票 0

为什么malloc这么大的内存会出现访问内存错误?

正如你所看到的,当我运行它时,我遇到了内存访问错误。但是如果 我将malloc_size更改为100,它可以工作。如何在不更改 malloc_size 的情况下修复它。 int malloc_size = 900000; 浮动* ptr = (

回答 1 投票 0

std::malloc/calloc/realloc/free 与纯 C 的 malloc/calloc/realloc/free 有什么不同吗

为什么 C++ 需要自己版本的 C 标准库 malloc/calloc/realloc/free 函数?它们看起来完全一样。我应该更喜欢在 C++ 中使用 std:: 版本吗?他们的行为可以不同吗...

回答 1 投票 0

如何分配二维数组? [重复]

我需要创建一个二维数组。目前我将其创建为 整数a[100][100] 但我需要使用 C 语言中的 malloc 动态分配内存。我用了代码 #包括 我需要创建一个二维数组。目前我将其创建为 int a[100][100] 但是我需要使用C语言中的malloc动态分配内存。我用了代码 #include <stdio.h> #include <stdlib.h> int main(void) { int n=6, m=5, i, j; int **a = malloc(n * sizeof(int *)); for(i = 0; i < m; i++) a[i] = malloc(m * sizeof(int)); for( i = 1; i <= n; i++ ) { for( j = 1; j <= m; j++ ) { scanf("%d %d",&a[i][j]); } } return 0; } 但是现在在将元素输入数组时它显示分段错误。 您在评论中说n是行数。因此,您需要分配 n 行,每行长度为 m。因此,第二个for循环条件应该是i < n。另外,您应该检查 malloc 的返回值,以防分配内存失败。我建议进行以下更改 -NULL 请注意,多维数组并不是一种全新的类型。它只是一个元素数组,其中每个元素本身就是一个数组(对于 2D 数组)、数组的数组(对于 3D 数组)等等。如果您使用long long **a = malloc(n * sizeof(*a)); for (i = 0; i < n; i++) { a[i] = malloc(m * sizeof(*a[i])); } ,您可以干净简洁地分配数组,如C99 您还应该了解一下 - 我如何在 C 中使用动态多维数组? 您有三个错误:第一个是您仅分配了 int nrow = 4; // number of rows int ncol = 8; // number of columns // define arr to be a pointer to an array of ncol ints, i.e., // arr is a pointer to an object of type (int[ncol]) int (*arr)[ncol] = malloc(sizeof(int[nrow][ncol])); // check the result of malloc for NULL if (arr == NULL) { printf("malloc failed to allocate memory\n"); // handle it } // do stuff with arr for (int i = 0; i < nrow; i++) { for (int j = 0; j < ncol; j++) { arr[i][j] = i + j; } } // after you are done with arr free(arr); 辅助数组,但在输入中您循环了其中的 5。 第二个问题是数组索引是基于零的,即索引从零开始,直到大小减一。 第三个问题是你扫描了两个数字(为什么?),但你只提供了一个指向6的目标指针。 你只需要 scanf 如果你想要一大块内存。 如果您想要一个 long *a = malloc(100*100*sizeof(long)); 指针数组,然后每个数组位于单独的内存块中,请像这样: long* 这会创建 1 个 long **a = malloc(100*sizeof(long*)); for (i=0; i<100; i++) { a[i] = malloc(100*sizeof(long)); } 指针数组,然后创建 1 个每个指针有 100 个 long* 的数组,但我现在不确定你是否说 longs 例如,它是否会计算元素的位置,就像它的位置一样一个连续的块。检查出。 :) 如果你有 C99 使用可变长度数组 a[10][15] 否则需要手动计算索引。 你的代码有很多问题 首先,您需要 #include <stdio.h> #include <stdlib.h> int main(void) { unsigned rows, cols; printf("Enter rows and columns: "); fflush(stdout); scanf("%u%u", &rows, &cols); int (*a)[cols]; // pointer to VLA a = malloc(rows * cols * sizeof a[0][0]); if (a) { for (unsigned r = 0; r < rows; r++) { for (unsigned c = 0; c < cols; c++) { a[r][c] = r*c; } } printf("the element at [4, 2] is %d\n", a[4][2]); free(a); } return 0; } ,但您只为 long long a[100][100]s 分配足够的空间 int 您还越界访问数组。索引从 0 开始到 array_length-1。 另一个问题是你扫描了 2 个 int 值,但只提供了 1 的地址。 a[i] = malloc(m * sizeof(int)); 您可以分配一个 100 元素的指针数组,每个指针都指向另一个 100 元素数组的数组,但这并不好,因为执行 100 scanf("%d %d",&a[i][j]); 需要时间,并且生成的内存很可能不是连续的,这使得它的缓存不友好。还有一个小的内存开销,因为内存分配器必须将其四舍五入到最接近的块大小,这很可能是 2 的幂,当您在第一维中分配越来越多的元素时,它可能会很大。 您应该声明一个大小为 100*100 的一维数组。这将更快并提高缓存一致性。要获取 malloc 处的元素,只需执行 a[i][j] a[i*WIDTH + j]

回答 5 投票 0

在c中使用free()时发生异常,分段错误;

我的代码以某种方式运行,但它没有给出预期的结果,所以为了理解它,我开始调试,它显示发生了异常,我使用 free() 的行出现了分段错误。 哈...

回答 1 投票 0

如何找到指针错误的根源

#包括 #包括 #包括 #include“splitter.h” #定义四_K 4096 SplitResult split_join(int argc, char *argv[]) { 分割结果...

回答 1 投票 0

PyList_New() 导致分段错误“free():invalidpointer”

我正在尝试将 2D C 数组转换为 2D Python 列表。但是当代码尝试调用 PyList_New() 时,我遇到分段错误。行和列的大小通常固定为 50。这发生在

回答 1 投票 0

fprintf 在 while 循环中无法正常工作

我一直在学习C语言中的动态内存分配并在代码中进行练习。虽然我认为我已经正确分配了内存,但我可能是错的。所以任何有用的评论都是

回答 1 投票 0

(GNU+Linux) 多个线程同时调用malloc()

我在网上读到,大多数现代 UNIX 系统默认都带有线程安全的 malloc()。我知道这仅仅意味着一个线程可以安全地调用 malloc(),而另一个线程已经在中间......

回答 1 投票 0

使用矩阵时使用Sprintf

我尝试在下面的代码中运行 sprintf 函数,但它给出了段错误,不知道为什么。 #包括 #包括 #包括 int main(int argc, char ...

回答 1 投票 0

将 char* 分配给 void* 字段

我需要编写一个程序来读取文件行并将它们保存在链接队列中。我正在使用一个在每个节点中使用 void* 数据字段的库。 当我尝试打印存储的所有行时,程序

回答 1 投票 0

我应该在这段代码中放置“free(BlockOfMemory)”吗?

#包括 #包括 int main() { int *numbers = malloc(5 * sizeof(int)); // Speicherplatz auf 10 ints vergrößern int *temp = realloc(数字, 10 * sizeo...

回答 2 投票 0

我不知道我必须把“free(BlockOfMemory)”放在哪里

int main() { int *numbers = malloc(5 * sizeof(int)); // Speicherplatz auf 10 ints vergrößern int *temp = realloc(数字, 10 * sizeof(int)); 如果(临时!= NULL){ 数字 = t...

回答 1 投票 0

如何修复 valgrind“条件跳转或移动取决于未初始化的值”错误?

我有这个简单的程序: #包括 #包括 #包括 int 主函数(无效){ 字符*str; 字符串=空; str = malloc(sizeof(char) * 20); 圣...

回答 1 投票 0

malloc:损坏的顶部大小无法找出问题

我想编写一个简单的 C 程序,它接收矩阵(首先是它的大小)并反转它,所以我编写了一些代码,编译它,运行并得到大小为 gr 的矩阵的“malloc:损坏的顶部大小”错误。 ..

回答 1 投票 0

LeetCode C 中的二和问题。请帮我指点一下

我是 LeetCode 的新手,我唯一的 C 背景是其基础知识的一类。我希望能够进步并了解更多。请帮助我解决这个问题。我认为我的问题在于这一点......

回答 1 投票 0

为什么我无法初始化链表?

我试图创建一个链表,但头指针始终指向空,因此在获取链表的大小和元素后没有输出。另外当我把头当作...

回答 1 投票 0

为什么局部变量的值与其指定的值不同?

当矩阵的维度为 1x2 时,变量 i 的值已经是 912,因此程序会遇到分段错误。我真的不明白问题是什么以及为什么会发生这种情况......

回答 1 投票 0

我应该如何在函数内使用 calloc 初始化数组?

在尝试解决称为螺旋矩阵的问题时,我遇到了一个问题,即无法使用 calloc 初始化函数内部的数组。 /* * 注意:返回的数组必须是mal...

回答 1 投票 0

是否有一个函数可以将字符串复制到内存中的新空间

如果我想在C编程中将字符串“Best School”复制到内存中的新空间中,我可以使用什么语句为其保留足够的空间 我尝试过使用这个 malloc(strlen("最好的S...

回答 1 投票 0

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