标签: malloc

第一个"c"在"calloc"中代表什么?

一名学生问了这个问题,我不确定.

猜测包括:"计数","清算","分块","完整",......

标准库文档没有说明它代表什么,并且没有类似命名的函数来指示模式.有没有人知道实际的词源,也许有一个权威的参考来支持它?

c malloc libc calloc c-standard-library

44
推荐指数
2
解决办法
7415
查看次数

如何为字符串动态分配内存空间并从用户获取该字符串?

我想用C程序读取用户的输入.我不想使用数组,

char names[50];
Run Code Online (Sandbox Code Playgroud)

因为如果用户给出长度为10的字符串,那么剩余的空间就会被浪费掉.

如果我使用字符指针,

char *names;
Run Code Online (Sandbox Code Playgroud)

那么我需要以这样的方式为它分配内存,

names = (char *)malloc(20 * sizeof(char));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,也存在内存浪费的可能性.

所以,我需要的是为字符串动态分配内存,该字符串与字符串的长度完全相同.

让我们假设,

如果用户输入是"stackoverflow",那么分配的内存应该是14(即字符串的长度= 13和'\ 0'的1个额外空间).

我怎么能实现这个目标?

c string malloc memory-management dynamic

43
推荐指数
4
解决办法
12万
查看次数

如果`malloc(0)`返回一个非空指针,我可以将它传递给`free`吗?

我一直在阅读有关malloc当您请求零大小的块时的行为的讨论.

我理解malloc(0)是实现定义的行为,它应该返回一个空指针,或者我仍然不应该访问的非空指针.(这是有道理的,因为不能保证它指向任何可用的内存.)

但是,如果获得这样一个不可访问的非空指针,我是否允许以free通常的方式传递给它?或者这是非法的,因为我得到的指针malloc(0)可能不指向实际分配的内存块?

具体而言,以下代码是否具有明确定义的行为:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int* x = (int*) malloc(0);
    if (x == NULL) {
        printf("Got NULL\n");
        return 0;
    } else {
        printf("Got nonnull %p\n", x);
    }
    free(x); // is calling `free` here okay?
}
Run Code Online (Sandbox Code Playgroud)

c malloc free memory-management

43
推荐指数
2
解决办法
2521
查看次数

你能用c或c ++分配一个非常大的单块内存(> 4GB)吗?

这些天我有很大的ram,我想知道,有可能分配一块大于4GB的单块内存吗?或者我需要分配一堆较小的块并处理它们之间的切换?

为什么???我正在处理一些openstreetmap xml数据,这些文件非常庞大.我目前正在流式传输,因为我无法将它们全部加载到一个块中,但我对malloc或new的上限感到好奇.

c c++ memory malloc

42
推荐指数
7
解决办法
2万
查看次数

使用cudamalloc().为什么双指针?

我目前正在浏览http://code.google.com/p/stanford-cs193g-sp2010/上的教程示例以学习CUDA.__global__下面给出了演示功能的代码.它只创建了两个阵列,一个在CPU上,一个在GPU上,用7号填充GPU阵列,并将GPU阵列数据复制到CPU阵列中.

#include <stdlib.h>
#include <stdio.h>

__global__ void kernel(int *array)
{
  int index = blockIdx.x * blockDim.x + threadIdx.x;

  array[index] = 7;
}

int main(void)
{
  int num_elements = 256;

  int num_bytes = num_elements * sizeof(int);

  // pointers to host & device arrays
  int *device_array = 0;
  int *host_array = 0;

  // malloc a host array
  host_array = (int*)malloc(num_bytes);

  // cudaMalloc a device array
  cudaMalloc((void**)&device_array, num_bytes);

  int block_size = 128;
  int grid_size = num_elements / block_size;

  kernel<<<grid_size,block_size>>>(device_array); …
Run Code Online (Sandbox Code Playgroud)

c malloc cuda

41
推荐指数
4
解决办法
4万
查看次数

<stdlib.h>和<malloc.h>之间的区别

当我malloc在C程序中使用时,我收到警告:

warning: incompatible implicit declaration of built-in function 'malloc' [enabled by default]
Run Code Online (Sandbox Code Playgroud)

然后我可以包括<malloc.h><stdlib.h>摆脱warning它虽然它没有它也可以工作.

所以我想知道,gcc当我不包含任何内容时,这些标题之间有什么区别?

(我使用ubuntu 12.04 64-bitgcc 4.6.3)

c malloc gcc

41
推荐指数
5
解决办法
6万
查看次数

为什么在malloc中使用sizeof(*pointer)更安全

特定

struct node
{
     int a;
     struct node * next;
};
Run Code Online (Sandbox Code Playgroud)

要malloc一个新的结构,

struct node *p = malloc(sizeof(*p));
Run Code Online (Sandbox Code Playgroud)

比...更安全

struct node *p = malloc(sizeof(struct node));
Run Code Online (Sandbox Code Playgroud)

为什么?我以为他们是一样的.

c malloc

41
推荐指数
3
解决办法
3万
查看次数

以2的幂分配内存是否更好?

当我们使用malloc()分配内存时,我们应该给出两个幂的大小吗?或者我们只是给出我们需要的确切尺寸?
喜欢

//char *ptr= malloc( 200 ); 
char *ptr= malloc( 256 );//instead of 200 we use 256
Run Code Online (Sandbox Code Playgroud)

如果给出2的幂的大小更好,那是什么原因?为什么更好?

谢谢

编辑

我混淆的原因是在Joel的博客Back to Basics中引用

智能程序员通过始终分配大小为2的内存块来最小化malloc的潜在破坏.你知道,4个字节,8个字节,16个字节,18446744073709551616个字节等.由于任何使用乐高的人都应该直观的原因,这可以最大限度地减少自由链中发生的奇怪碎片的数量.虽然看起来这似乎浪费了空间,但也很容易看出它永远不会浪费50%以上的空间.所以你的程序使用的内存不会超过它需要的两倍,这不是什么大不了的事.

对不起,我应该早点发布上面的报价.我很抱歉!

到目前为止,大多数回复都说,以2的力量分配内存是一个坏主意,那么在哪种情况下更好地遵循Joel的观点malloc()呢?他为什么这么说?以上引用的建议现在已经过时了吗?

请解释一下.
谢谢

c malloc memory-management

40
推荐指数
3
解决办法
6390
查看次数

为什么C++需要为malloc()进行强制转换,但C不需要?

我一直对此感到好奇 - 为什么在C++中我必须从mallocC而不是在C中转换返回值?

以下是C++中的示例:

int *int_ptr = (int *)malloc(sizeof(int*));
Run Code Online (Sandbox Code Playgroud)

以下是C++中不起作用的示例(无转换):

int *int_ptr = malloc(sizeof(int*));
Run Code Online (Sandbox Code Playgroud)

我听说在C中,事实上,输出输出malloc()是一个错误.

任何人都可以评论这个话题吗?

c c++ malloc

39
推荐指数
3
解决办法
8240
查看次数

malloc:***错误:释放对象的校验和不正确 - 对象可能在被释放后被修改

我的iOS应用程序存在很大问题:它有时会在没有详细调试错误的情况下崩溃.堆栈跟踪为空.这些是堆栈跟踪中仅有的两行:

  1. UIApplicationMain中的崩溃开始于"符号存根: - [_ UIHostedTextServiceSession dismissTextServiceAnimated:]".
  2. 并报告"libsystem_c.dylib`malloc_error_break".

com.apple.main-thread.

Xcode调试器上的错误(连接设备):

malloc: *** error for object 0x208a7614: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
Run Code Online (Sandbox Code Playgroud)

我在malloc_error_break中使用libsystem_c.dylib设置了断点,没有来自调试器的任何反馈.我不知道要解决这个问题.

c crash malloc objective-c ios

39
推荐指数
2
解决办法
8万
查看次数

标签 统计

c ×10

malloc ×10

memory-management ×3

c++ ×2

c-standard-library ×1

calloc ×1

crash ×1

cuda ×1

dynamic ×1

free ×1

gcc ×1

ios ×1

libc ×1

memory ×1

objective-c ×1

string ×1