Tag: malloc

unit testingC库,内存管理

我正在开发一个相当大的C库,现在没有任何测试。 由于API开始是最终的,我想开始编写unit testing。 几乎所有的函数都作用于第一个参数(一个结构)。 unit testing的朴素方法是使预函数调用结构处于已知状态,调用函数,然后将预调用结构与预期结果进行比较。 现在这适用于由标量类型组成的结构,但至于分配的内存,我想知道你正在使用什么样的方法。 例如,想象一下图像结构,当你这样做时: CreateImage(&img, x, y); 你希望img-> x是x,img-> y是y而img->像素是一个指向大到足以容纳x * y * sizeof(pixel)东西的指针。 检查前两个是微不足道的,但img->像素怎么样? 我不是要检查malloc调用是否成功,因为我可以重载 malloc,但我想知道malloc是否被正确调用。 在以下情况下,这一点尤为重要: CreateImage(*img, x, y) { img->x = x; img->y = y; /* do something, dhoo, that something is broken and modify x or y */ img->pixels = malloc(x * y * sizeof(pixel)); /* wrong […]

将文件中的值加载到2D数组指针的值

如何在另一个函数中正确地将文件中的值加载到矩阵中? void someFunction(int ***matrix, n, m) { int c, d; FILE *fp = fopen(“some.txt”, “r”); // načtení souboru for (c = 0; c < m; c++) { for (d = 0; d < n; d++) { fscanf(fp, "%i", &matrix[c][d]); //4th read throws error } } } int main() { int i; int **matrix; int n […]

正确使用malloc

我正在阅读的书中有一章专注于使用malloc linux函数分配空间的内存管理。 在我读这篇文章之前,我会在不分配空间的情况下编写相对较小的程 对于内存占用率低于50MB的应用程序,不对内存分配做任何事情是否可以接受? 不这样做的后果是什么?

创建一个char *的2D数组,用回调函数中的sqlite数据填充它

在我的函数中,我调用rc = sqlite3_exec(db, sqlStatement, callback, &a, &zErrMsg); 具有callback函数的函数。 在这个callback函数中,我想用数据库中的数据填充二维char *数组。 struct mytable { char ***data; size_t dim; }; static int callback(void *data, int argc, char **argv, char **azColName) { struct mytable *old = (mytable *)data; char ***temp; old->dim++; temp = (char ***)realloc(old->data, old->dim * sizeof(*old->data)); if (temp) { old->data = temp; old->data[old->dim – 1] = […]

C语言中字符串数组的动态分配

对于家庭工作,我需要定义一个将内存分配给字符串数组的函数(它是一个结构体)。 给出每个字符串的长度:MAX_WORD_LEN + 1(= 10 + 1)我必须为len个字符串分配内存, len在输入中接收。 具有字符串数组定义的struct(给定): struct dict{ int len; char (*dict0)[MAX_WORD_LEN+1]; char (*dict1)[MAX_WORD_LEN+1]; }; 我不明白声明char (*dict0)[MAX_WORD_LEN+1]; 函数声明也给出了: void createDict(struct dict * myDict); 这是我写的,但我不确定它是否有效,而且我很难在编译器中检查它。 我也根据这个和其他网站的post写了它,并没有真正理解它: 选项1: void createDict(struct dict* myDict) { myDict->(*dict0) = malloc( (myDict->len)*sizeof(char*)); myDict->(*dict1) = (char**) malloc( (myDict->len)*sizeof(char*)); for(int i=0;ilen);i++) { (myDict->(*dict0)[i]) = (char*)malloc((MAX_WORD_LEN+1)*sizeof(char)); (myDict->(*dict0)[i]) = (char*)malloc((MAX_WORD_LEN+1)*sizeof(char)); } } 方案2: […]

在malloc.c中断言:2453

我有以下程序试图标记一个字符串(基于空格)并将其写入char **数组。 #include #include #define len 180 void tokenize(char *str, char **tokens) { int l = 0, index = 0; int i = 0; int str_i; int tok_i; while(*str) { if (*str == ‘ ‘) { tokens[i] = malloc(sizeof(char) * l+1); if (tokens[i] == NULL) return; tok_i = 0; for (str_i=index-len ; str_i<index ; str_i++) […]

对结构中的结构进行mallocing数组(C)

我很难找到这个问题的答案; 我在网上找到了类似的例子但没有解决我的问题。 我有一个公司,公司数据的struct ,以及公司集合的第二个struct ,Consortium。 第二个struct将包含第一个struct可变长度数组,即公司数据struct 。 可变长度arrays的元素数量将取决于联盟中公司的数量。 我想动态分配所需的任何东西,但我有点迷失。 这些是结构: typedef struct { char code[]; double sharePrice; int numShares; double totalVal; double totalDebts; } Company; typedef struct { int numCore; int numAssoc; Company core[]; Company assoc[]; } Consortium; 将有许多核心公司,这个数字将是Consortium struct核心数组的大小。 联营公司也是如此。 我想出了这个表达,但我不确定我错过了什么: Consortium *consort=((Consortium*)malloc((numCore+numAssoc)*(sizeof(Consortium));

C – 指针内存分配

有人可以向我解释之间的区别 int *x = malloc(sizeof(int)); && int *x = (int*)malloc(sizeof(int)); 谢谢!

为全局访问保存2D动态数组(矩阵)c

我正在尝试将使用函数填充的2D数组保存到全局内存中。 处理了许多矩阵,并且在成功时,需要保存正确的Matrix以访问许多function。 目前,函数中的矩阵是使用以下代码动态分配的: int **M = malloc(m * sizeof(int *)); for(i = 0; i < m; i++) M[i] = malloc(n * sizeof(int)); 我声明了一个全局变量(int ** M_save)。 在需要保存矩阵的主程序中,使用相同的过程初始化全局数组: **M_save = malloc(m * sizeof(int *)); for (i = 0; i < m; i++) M_save[i] = malloc(n * sizeof(int)); 然后通知该函数它需要在释放其内存之前保存矩阵,并在保存的函数中使用以下过程: if(saveMatrix == 1) { for(i = 0; i < […]

为char数组分配内存以连接已知的文本和整数

我想连接一段文本,例如“答案是”带有符号整数,给出输出“数字是42”。 我知道这段文字有多长(14个字符),但我不知道该字符串表示的字符数是多少。 我假设最坏的情况,最大的有符号16位整数有5位数,如果它是负数,还有一个额外的,所以下面的代码是正确的方法吗? #include #include int main() { char *message; message = malloc(14*sizeof(char)+(sizeof(int)*5)+1); sprintf(message, “The answer is %d”, 42); puts(message); free(message); }