标签: malloc

操作内存时是否需要乘以sizeof(char)?

当使用malloc并进行类似的内存操作时,我可以依赖sizeof(char)始终为1吗?

例如,我需要为N个元素类型分配内存char.是否sizeof( char )需要乘以:

char* buffer = malloc( N * sizeof( char ) );
Run Code Online (Sandbox Code Playgroud)

或者我可以依赖sizeof(char)始终为1并且只是跳过乘法

char* buffer = malloc( N );
Run Code Online (Sandbox Code Playgroud)

我完全理解sizeof在编译期间进行评估,然后编译器甚至可以编译出乘法,因此性能损失将是最小的并且很可能为零.

我主要询问代码清晰度和可移植性.这种乘法对于类型是否必要char

c malloc memory-management sizeof

15
推荐指数
5
解决办法
4383
查看次数

在malloc内存上使用sizeof()

可能重复:
有关malloc和sizeof的新手问题

我正在尝试将字符串读入程序.当我注意到字符串有时被破坏时,我尝试了以下代码:

 void *mallocated = malloc(100);
 printf("sizeof(mallocated) = %d\n", sizeof(mallocated));
Run Code Online (Sandbox Code Playgroud)

根据我的程序,大小mallocated8,即使我为它分配了100个字节.因此,每当我尝试存储长度超过8个字节的字符串时,第8个字节后的所有内容有时会消失.为什么会发生这种情况,我该如何预防呢?

c malloc sizeof

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

Git克隆失败并出现内存不足错误 - "致命:内存不足,malloc失败(尝试分配905574791字节)/致命:index-pack失败"

我正在尝试将大型(1.4GB)Git存储库克隆到具有384MB RAM的32位Debian VM.我正在使用Git 1.7.2.5,并使用SSH协议进行克隆('git clone user@host.com:/ my/repo')

克隆因此消息失败:

remote: Counting objects: 18797, done.
remote: warning: subobtimal pack - out of memory
remote: Compressing objects: 100% (10363/10363), done.
fatal: out of memory, malloc failed (tried to allocate 905574791 bytes)
fatal: index-pack failed
Run Code Online (Sandbox Code Playgroud)

我已经尝试减少Git用于在主机存储库端重新打包并重新打包的内存量:

git config pack.windowMemory 10m
git config pack.packSizeLimit 20m
git repack -a -d
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

  1. 这是一个客户端大小(克隆端)问题还是应该在我克隆的repo中解决?
  2. 在任何一种情况下,我能做些什么来使克隆成功吗?在线的许多潜在解决方案涉及以下部分/全部内容,在这种情况下,这些都不可接受:

    • 实质上改变存储库的内容(即删除大文件)
    • 给正在做克隆的VM更多RAM
    • 为正在进行克隆的VM提供64位虚拟CPU
    • 带外传输(例如使用Rsync或SFTP传输.git目录)

提前致谢.

memory git malloc debian

15
推荐指数
1
解决办法
2万
查看次数

如何用基本的c例子运行valgrind?

安装:

bzip2 -d valgrind-3.10.1.tar.bz2
tar -xf valgrind-3.10.1.tar 
Run Code Online (Sandbox Code Playgroud)

然后:

./configure
make
make install
Run Code Online (Sandbox Code Playgroud)

或者更简单

sudo apt-get install valgrind
Run Code Online (Sandbox Code Playgroud)

如何在这个简单的程序example1.c上运行valgrind

#include <stdlib.h>
int main()
{
    char *x = malloc(100); /* or, in C++, "char *x = new char[100] */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

跑:

valgrind --tool=memcheck --leak-check=yes example1
valgrind: example1: command not found
Run Code Online (Sandbox Code Playgroud)

控制台输出:

valgrind: example1: command not found
Run Code Online (Sandbox Code Playgroud)

c c++ malloc valgrind memory-leaks

15
推荐指数
1
解决办法
2万
查看次数

两次指针自由调用

我在讲座中被教过,free()两次拨打指针真是非常糟糕.我知道NULL在释放它之后立即设置指针是一种很好的做法.

但是,我仍然没有听到任何解释为什么会这样.根据我的理解,方式malloc()有效,它应该在技术上跟踪它已经分配的指针并让你使用.那么为什么它不知道它接收到的指针是否free()已被释放?

当你打电话free()给以前已经被释放的位置时,我很乐意理解,内部会发生什么.

c malloc free pointers dynamic-memory-allocation

15
推荐指数
2
解决办法
6568
查看次数

malloc归零内存?

鉴于这个用gcc 4.3.3编译的C代码

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


int main(int argc, char * argv[])
{

    int * i;

    i = (int *) malloc(sizeof(int));

    printf("%d\n", *i);
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

我希望输出是malloc()返回的内存中的任何内容,而输出是0. malloc是否将它返回的内存归零?如果是这样,为什么?

c malloc

14
推荐指数
2
解决办法
1万
查看次数

在C中分配矩阵

我想分配一个矩阵.

这是唯一的选择:

int** mat = (int**)malloc(rows * sizeof(int*))

for (int index=0;index<row;++index)
{
    mat[index] = (int*)malloc(col * sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)

c malloc pointers matrix

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

如果删除用于释放使用malloc()获得的内存,是否应该产生警告或甚至断言失败?

在C++中使用delete释放所获得的内存malloc()并不一定会导致程序爆炸.

如果delete用于释放使用的内存,是否应该产生警告或甚至断言失败malloc()

为什么Stroustrup在C++上没有这个功能?

c++ malloc memory-management

14
推荐指数
2
解决办法
5497
查看次数

什么是对齐的内存分配?

我也想知道glibc malloc()是否这样做.

malloc

14
推荐指数
2
解决办法
1万
查看次数

malloc和免费代码

我在哪里可以找到我的gcc编译器目前使用的malloc代码?我实际上想编写自己的malloc函数,它与原版函数略有不同.我知道我可以使用hooks等等,但我希望看到真正的代码.

c linux malloc free

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