Tag: malloc

如何避免使用malloc?

随着最近的噪音C得到,我读到有一些方法可以最大限度地减少C中malloc的使用,这是一个非常好的做法。 我怎么也不知道这种做法何时,如何或如何做好。 所以我的问题是,也许一些有经验的C程序员可以提供一些例子,其中一个人可以(或应该)写一些没有malloc的东西,但对于新手C程序员来说真的是非显而易见的方式(因此说新手只会使用malloc) ? 也许你有一些经验可以将malloc分解成其他东西。 PS我读到的一些post引用了Quake 3源代码以及它如何避免使用malloc,所以如果有人知道这一点,知道在那里做了什么会很有趣,因为至少知道我想避免挖掘地震代码漫无目的。 (因为如果他们避免使用malloc搜索malloc不会给我带来太多结果,那么代码库也很可能不像单个示例那么简单)

释放malloc不会删除char数据

我做了一个更大问题的小方案。 我尝试做的是将一个字符串传递给一个函数,该函数将从中生成一个新的字符串。 但是我遇到了一些问题。 我已将字符串定义为 typedef char string[1024]; 然后我有一个函数,它接受一个字符串并生成一个新的字符串,用旧的字符串和一个点字符填充 string* add_sth_to_string(char* msg){ string* newStr=malloc(sizeof(string)); // malloc a newStr strcpy(*newStr, msg); // copying msg to newStr char buff[1024]; // making a buffer strcat(buff, “.”); // adding a dot to buffer strcat(buff, *newStr); // adding msg to buffer strcpy(*newStr, buff); // copying buffer to newStr return newStr; } […]

字符串比较不使用标准库函数

我是C编程的新手。 这只是一个初学者的问题。 我试图在不使用标准函数的情况下实现字符串比较。这里我使用了动态内存分配并使用了fgets() 。 但是没有输入第二个字符串。 任何人都可以帮我指出问题吗? 代码如下。 #include #include int my_strcmp(char*, char*); int main() { int a, n; printf(“enter the length of strings\n”); scanf(“%d”,&n); getchar(); char *s1 = (char *)malloc(n * sizeof(char)); printf(“enter the string1\n”); fgets(s1, n, stdin); getchar(); char *s2 = (char *)malloc(n * sizeof(char)); printf(“enter the string2\n”); fgets(s2, n , stdin); if (s1 […]

C – 如何从Stdin或文件内存中读取字符串行

我需要一个读取行的版本,即内存保存。 我有这个“工作”的解决方案。 但我不确定它与记忆的表现如何。 当我启用free(text)它适用于几行,然后我收到一个错误。 所以现在虽然我是malloc文本,但是文本和结果都没有被释放。 那是对的吗 ? 为什么会这样呢? #include #include #include char* readFromIn() { char* text = malloc(1024); char* result = fgets(text, 1024, stdin); if (result[strlen(result) – 1] == 10) result[strlen(result) – 1] = 0; //free(text); return result; } 我有很多短线要阅读,我还需要stdin可以用FILE*句柄替换。 我没有必要重新分配文本,因为我只有短线。

为什么我会出现段错误?

这是我的代码,我得到一个分段错误,我不知道为什么……我正在创建一个n是它的大小的网格, tab是一个数组,他的类型是cellule:一个单元格有2个值。 所以我在函数creer_grille创建了一个数组我malloc它(大小可以是4 6或8)并且我用-1和0初始化单元格值。然后在下面的函数中我正在测试creer_grille函数。 typedef struct { int val; int initial; } cellule; typedef struct { cellule *tab; int n; } grille; grille *creer_grille(int n) { grille *g; int i; assert(n == 4 || n == 6 || n == 8 && “Taille de la grille différent de 4,6 ou 8”); g->n = n; g […]

realloc和malloc函数

看看代码: #include #include void main() { int *p; p = malloc(6); p = realloc(p, 10); if (p == NULL) { printf(“error”); exit(1); } } 以此示例为代码,假设总内存为10个字节,并且通过malloc函数指定类型为int和ohter 6字节的声明使用2个字节,剩余的2个字节被其他程序占用,现在当我运行realloc函数时为了扩展指针指向的内存,它将在内存中搜索10个字节,当它不可用时,它从堆区域分配10个字节的内存并复制malloc的内容并将其粘贴到堆区域中的新分配的内存区域中。然后删除存储在malloc中的内存吧? realloc()是否返回NULL指针,因为内存不可用? 没有权利!? 它确实进入堆区域进行内存分配吗? 它不会返回NULL指针吗?

LibAIFF CloseFile:释放的指针未被随机分配

我编写了一段代码,试图在目录及其子文件夹中搜索两个AIFF文件,并使用LibAIFF库导入然后对它们执行一些处理操作。 第1部分:在目录中搜索文件 对于程序的这一部分,我需要查找具有已知名称的文件(可以将其视为相同的AIFF文件,但文件名不同)(例如SineSweepA.aiff和SineSweepB.aiff)然后构建它的绝对路径(我不知道的长度(因为我的程序需要在不同的计算机上工作,其中AIFF可以位于MainDirectory中的不同子文件夹中 – 请参阅下面的代码)但知道长度少于200个字符)。 我能够使用以下代码成功并始终如一地执行此操作: void file_search(char* parentDir, char* subFolder, char* filenamePrefix, char* tempString, char* tempFilepath, int* foundFlag, int* level); int32_t *import_sweeps(char* sweepFilepath, uint64_t* numSamples, int* numChannels, double* samplingRate, int* bitDepth, int* segmentSize, int* importFlag); int main() { … char MainDirectory[200] = “/Users/rrr/Documents/Foldername1/”; char tempFilepath[200], tempFilepathR[200], parentDir[200], filenamePrefix[200], subFolder[200], tempString[200]; int level = 0, […]

我是否应该在我的C代码中检测OOM(内存不足)错误?

我已经投入了大量的C代码行来清理标签/条件失败的内存分配(由alloc系列返回NULL )。 我被告知这是一个很好的做法,因此,在内存故障时,可以标记适当的错误状态, 并且调用者可以执行“优雅的内存清理”并重试。 我现在对这个我希望清理的哲学有些怀疑。 我想调用者可能会释放过多的缓冲区空间或剥离其数据的关系对象,但我发现调用者很少有能力 (或处于适当的抽象级别)这样做。 此外, 从被叫函数提前返回没有副作用通常是非常重要的。 我刚刚发现了Linux OOM杀手,这似乎使我的主要开发平台上的这些努力毫无意义。 默认情况下,Linux遵循乐观的内存分配策略。 这意味着当malloc()返回非NULL时,无法保证内存确实可用。 这是一个非常糟糕的错误。 如果事实certificate系统内存不足,那么一个或多个进程将被臭名昭着的OOM杀手杀死。 我认为可能还有其他平台遵循相同的原则。 有没有务实的东西使得检查OOM条件值得?

使用malloc分配的内存不会在函数范围之外保留?

嗨, 我对C的malloc函数有点新,但据我所知,它应该将值存储在堆中,因此您可以使用来自原始范围之外的指针来引用它。 我创建了一个应该执行此操作的测试程序,但在运行程序后,我一直得到值0。 我究竟做错了什么? int f1(int * b) { b = malloc(sizeof(int)); *b = 5; } int main() { int * a; f1(a); printf(“%d\n”, a); return 0; }

在什么情况下malloc可以返回NULL?

它从来没有发生在我身上,而且我已经编程多年了。 有人能给我一个非平凡程序的例子,其中malloc实际上不起作用吗? 我不是在谈论内存耗尽 :我正在寻找一个简单的例子,当你只分配一个由用户给出的绑定大小的内存块时,假设一个整数,导致malloc失败。