Tag: malloc

使用malloc()为const char字符串动态分配内存

我正在编写一个从.ini文件中读取值的程序,然后将该值传递给接受PCSTR的函数(即const char *)。 该函数是getaddrinfo() 。 所以,我想写PCSTR ReadFromIni() 。 要返回一个常量字符串,我计划使用malloc()分配内存并将内存转换为常量字符串。 我将能够获得从.ini文件中读取的确切字符数。 这种技术还好吗? 我真的不知道还能做什么。 以下示例在Visual Studio 2013中正常运行,并根据需要打印出“hello”。 const char * m() { char * c = (char *)malloc(6 * sizeof(char)); c = “hello”; return (const char *)c; } int main(int argc, char * argv[]) { const char * d = m(); std::cout << d; // use PCSTR […]

float *从C到C#

我不是一个真正的CS人,所以如果你们这里的天才能指出我正确的方向,我将永远感激。 我有一个c-code命令行函数,用于将其结果写入文件。 我将其转换为通过float *数组将其数据返回到类似的C ++程序(以避免常量文件I / O): float * mgrib(int argc, char **argv) 这非常有效。 我现在需要把它变成一个C#程序,这就是事情变得混乱的地方。 我做的第一件事就是避免使用char **来使争论成为一系列bool。 如果我允许它仍然转储到文件,这工作正常。 问题是在C#中使用c风格的float数组。 在c-code中,它被分配了malloc。 所以这是我尝试过的一切都没有成功(我知道数组的大小): 制作一个“免费”函数,以便在完成后从C#调用以释放内存。 经过几次循环后,C#崩溃,没有任何警告。 使用Marshal.FreeCoTaskMem从C#释放malloc。 结果相同。 将float *移动到参数并删除c代码malloc。 (void mgrib(…,float * data,…) __a)使用Marshal.AllocCoTaskMem分配它。 使用Marshal.FreeCoTaskMem释放它。 __b)使用Marshal.Copy进行分配。 使用Marshal.FreeCoTaskMem释放它(也许这是错的?) 我已经涉足了我能在网上找到的所有东西。 如果需要更多信息,请告诉我。 我希望这只是一个我想念的简单概念。

Malloc分配方案

是的,我正在参加计算机系统课程。 我有几个关于实现malloc的各种分配方案的问题。 对于显式列表,如果我使用类似LIFO的堆栈实现malloc,那么指向前一个释放内存的目的究竟是什么? 就像为什么你需要双链表? 不会单独链接列表工作吗? Malloc讲座。 我在网上找到了这个链接,你可以看看幻灯片7,看看我在说什么。 在查看隔离列表分配方案时,这些列表是单向的吗? 而且,合并机制究竟是什么? 例如,如果释放了4个单词,您是否会首先尝试在您将自由空间插入相应的隔离链表之前加入它? 或者您只是在相应的隔离链表的“4个字”部分中插入4个字块? 谢谢。

ARC&Malloc:EXEC_BAD_ACCESS

我一直在做一个项目已经有一段时间了,我决定跳到ARC。 我偶然发现了一些轰炸的代码,我想知道原因。 我已设法将其简化为此代码段: typedef __strong id MYID; int main(int argc, char *argv[]) { MYID *arr = (MYID *) malloc(sizeof(MYID) * 4); arr[0] = @”A”; // always get an EXEC_BAD ACCESS HERE arr[1] = @”Test”; arr[2] = @”Array”; arr[3] = @”For”; // uh oh, we need more memory MYID *tmpArray = (MYID *) realloc(arr, sizeof(MYID) * […]

malloc undefined

我目前正在重写链表模块,我收到一些奇怪的错误。 在两个IDE(Netbeans和Visual Studio Express)中,我收到一个警告,即malloc未定义,并且我的linkedlist.c文件中找不到的函数也没有定义。 下面是我的3个文件。 main.c中 #include #include #include “linkedlist.h” int main(void){ struct linked_list * l_list; l_list = new_list(); printf(“%i”, l_list->length); getchar(); return (EXIT_SUCCESS); } linkedlist.h #ifndef LINKEDLIST_H #define LINKEDLIST_H struct linked_list{ int length; struct linked_list_node * head_node_ptr; }; struct linked_list_node{ struct linked_list_node * prev_node_ptr; struct linked_list_node * next_node_ptr; struct linked_list_data * head_data_ptr; }; struct […]

malloc上释放对象的校验和不正确

我得到了 malloc: *** error for object 0x1001012f8: incorrect checksum for freed object – object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug 以下函数中的错误: char* substr(const char* source, const char* start, const char* end) { char *path_start, *path_end, *path; int path_len, needle_len = strlen(start); path_start = strcasestr(source, start); if (path_start […]

如何在C中正确释放char **表

我需要你对这段代码的建议:表字段选项[0],选项[1]等……似乎没有正确释放。 谢谢你的回答 int main() { …. char **options; options = generate_fields(user_input); for(i = 0; i < sizeof(options) / sizeof(options[0]); i++) { free(options[i]); options[i] = NULL; } free(options); } char ** generate_fields(char *) { char ** options = malloc(256*sizeof(char *)); … return options; }

如何在C中正确使用strtok,以便没有内存泄漏?

我对在C中使用char指针调用strtok时会发生什么感到困惑。我知道它会修改字符串的内容,所以如果我在名为’line’的变量上调用strtok,它的内容将会改变。 假设我遵循以下方法: void function myFunc(char* line) { // get a pointer to the original memory block char* garbageLine = line; // Do some work // Call strtok on ‘line’ multiple times until it returns NULL // Do more work free(garbageLine); } 进一步假设’line’在传递给myFunc之前被malloced。 我应该在使用strtok之后释放原始字符串还是为我们完成工作? 另外,如果’line’没有被malloced并且我尝试使用上面的函数会发生什么? 取而代之的是更安全吗? (假设程序员知道该行未被malloced,则不会免费拨打电话) 调用 char* garbageLine = line; myFunc(line); free(garbageLine); function定义 void […]

C中的内存分配

我有一个关于内存分配顺序的问题。 在下面的代码中,我在循环中分配4个字符串。 但是当我打印地址时,他们似乎并没有一个接一个地分配……我做错了什么,或者是OS实施的某种防御机制,以防止可能的缓冲区溢出? (我使用的是Windows Vista)。 谢谢。 char **stringArr; int size=4, i; stringArr=(char**)malloc(size*sizeof(char*)); for (i=0; i<size; i++) stringArr[i]=(char*)malloc(10*sizeof(char)); strcpy(stringArr[0], "abcdefgh"); strcpy(stringArr[1], "good-luck"); strcpy(stringArr[2], "mully"); strcpy(stringArr[3], "stam"); for (i=0; i<size; i++) { printf("%s\n", stringArr[i]); printf("%d %u\n\n", &(stringArr[i]), stringArr[i]); } 输出: abcdefgh 9650064 9650128 祝你好运9650068 9638624 mully 9650072 9638680 stam 9650076 9638736

2D数组和malloc的MPI_Scatter

我正在尝试使用MPI库在C中编写程序,其中主进程创建一个2D数组并将其行分配给其他进程。 矩阵具有维度p*p ,其中p是处理的数量。 这是代码: #include #include #include #include int **createMatrix (int nrows, int ncols) { int **matrix; int h, i, j; if (( matrix = malloc(nrows*sizeof(int*))) == NULL) { printf(“Malloc error”); exit(1); } for (h=0; h<nrows; h++) { if (( matrix[h] = malloc( ncols * sizeof(int))) == NULL) { printf("Malloc error 2"); exit(1); } } […]