Tag: malloc

在使用malloc时,C如何为2D(3D …)数组分配空间?

我在理解C如何为2D(或更多维)数组分配空间时遇到问题,尤其是当我们使用malloc等时。 以这个问题中的程序为例。 首先定义一维指针数组,然后将指向1D数据数组(在这种情况下为字符串)的指针放在第一个1D数组的每个框中。 因此无法保证整个2D数组是连续的(前一行的最后一个单元后跟下一行的第一个单元)。 每个1D数据arrays可以非常远,只有它们的指针是连续的。 我纠正还是错过了什么? 如果你能帮助我澄清这一点,我将非常感激。

malloc(0)实际上有效吗?

可能重复: malloc(0)有什么意义? 为什么malloc(0)实际上返回一个有效的写指针? char *str = NULL; str = (char*)malloc(0); // allocate 0 bytes ? printf(“Pointer of str: %p\n”, str); strcpy(str, “A very long string ……………….”); printf(“Value of str: %s”, str); free(str); // Causes crash if str is too long 输出: Pointer of str: 0xa9d010 Aborted Value of str: A very long string ………………. 当str更短时,它就可以正常工作。 […]

使用malloc动态创建字符串数组

我正在尝试使用malloc在C中创建一个字符串数组。 数组将保留的字符串数量可以在运行时更改,但字符串的长度将始终保持一致。 我试过这个(见下文),但遇到了麻烦,我们非常感谢任何正确方向的提示! #define ID_LEN 5 char *orderedIds; int i; int variableNumberOfElements = 5; /* Hard coded here */ orderedIds = malloc(variableNumberOfElements * (ID_LEN + 1)); 最终我希望能够使用数组来执行此操作: strcpy(orderedIds[0], string1); strcpy(orderedIds[1], string2); /* etc */

通过TCP / IP连接发送二进制文件

我将在这里重述整个问题,以便它是可以回答的。 我能够在不使用套接字的同一台机器上完美地复制二进制文件,只是制作一个简单的复制function。 尝试实现此代码以复制到TCP / IP连接但无法使其工作。 FILE *filehandle = fopen(“imagefile.jpg”, “rb”); FILE *dest =fopen(“imagecopy.jpg”, “wb”); // copied image file fseek(filehandle, 0, SEEK_END); unsigned long filesize = ftell(filehandle); char *buffer = (char*)malloc(sizeof(char)*filesize); rewind(filehandle); int bytesread = fread(buffer, sizeof(char), filesize, filehandle); for( int i=0; i<filesize; i++ ) { fputc(buffer[i], filehandle); // copies all the contents to dest } […]

malloc(sizeof(int))vs malloc(sizeof(int *))vs(int *)malloc(sizeof(int))

我承认所有这三个都有不同的含义。 但是,我不明白每种情况适用于哪些特定情况。 任何人都可以分享这些例子吗? 谢谢。 malloc(sizeof(int)) malloc(sizeof(int *)) (int *)malloc(sizeof(int))

C中奇怪的malloc行为

我有以下ANSI C代码: #include #include #include int main(void) { char *buffer = 0; int length = 0; FILE *f = fopen(“text.txt”, “r”); if(f) { fseek(f, 0, SEEK_END); length = ftell(f); fseek(f, 0, SEEK_SET); buffer = malloc(length); fread(buffer, 1, length, f); fclose (f); } printf(“File size: %d\nBuffer size: %d\nContent: %s\n=END=”, length, strlen(buffer), buffer); return 0; } 由于某种原因,在malloc之后需要更多的内存并从内存中输出额外的垃圾,例如:首先运行: […]

什么时候在C中需要malloc?

我认为所有malloc(sizeof(structure))都可以这样替换: char[sizeof(structure)] 然后什么时候需要malloc ?

glibc弃用的__malloc_hookfunction的替代方案

我正在为C编写一个内存分析器,因为它通过malloc_hooks拦截对malloc , realloc和free函数的调用。 不幸的是,由于它们在multithreading环境中的不良行为而被弃用。 我找不到描述替代最佳实践解决方案的文档来实现同样的事情,有人可以启发我吗? 我已经读过一个简单的#define malloc(s) malloc_hook(s)可以解决这个问题,但是这对我想到的系统设置不起作用,因为它太过于干扰原始代码库而不适合用于分析/跟踪工具。 必须手动更改原始应用程序代码是任何体面的分析器的杀手。 最理想的是,我正在寻找的解决方案应该通过链接到可选的共享库来启用或禁用。 例如,我当前的设置使用用__attribute__ ((constructor))函数)声明的函数来安装拦截malloc挂钩。 谢谢

malloc需要类型转换吗?

malloc中使用类型转换有什么用? 如果我不在malloc中编写类型转换,它会返回什么? (为什么malloc需要进行类型转换?)

如何确定分配的C缓冲区的大小?

我有一个缓冲区,想要做一个测试,看看缓冲区是否有足够的容量,我可以找到我可以添加到缓冲区的元素数量。 char *buffer = (char *)malloc(sizeof(char) * 10); 做一个 int numElements = sizeof(buffer); 不回10,有关如何实现这一点的任何想法?