Tag: 内存泄漏

C – 如何释放动态分配的内存?

看看这段代码,它是链表的一部分。 int main() { List* head1 = NULL; insertFront(&head1, 1); insertFront(&head1, 2); print(head1); free(head1); return 0; } 另一个function是: void insertFront(List** head, int value) { List* node = (List*)malloc(sizeof(List)); node->data = value; node->next = NULL; node->next = *head; *head = node; //free(node); essentially I am not freeing node } 我的问题是: 我的代码是否会导致内存泄漏问题? 我是否需要为节点(在函数内部)释放已分配的内存(动态)? 如果我释放head1,那么为节点分配的内存是否也会被释放? 如果是,那怎么样?

MPI_Gatherv:创建和收集可变大小的数组(MPI + C)

我是MPI的新手,我试图并行管理不同大小的数组,然后将它们传递给主线程,到目前为止还没有成功。 我已经了解到了 MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm) 是这种情况下的方法。 这是我的示例代码,由于内存问题而无效(我认为)。 #include #include #include #include int main (int argc, char *argv[]) { MPI_Init(&argc, &argv); int world_size,*sendarray; int rank, *rbuf=NULL, count; int *displs=NULL,i,*rcounts=NULL; MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &world_size); if(rank==0){ rbuf = malloc(10*sizeof(int)); displs […]

我如何知道何时应该释放库函数返回的C中的字符串?

我应该使用free() ¹自己在C中释放哪些字符串? 我的知识状态: char a[256]; :不 char *a = “abcdefg”; :不 char *a = malloc(15L); :是的 getenv()返回的字符串: no Windows函数返回的字符串²:??? ¹或LocalFree() / GlobalFree() / VirtualFree() ²特别是GetCommandLineW()

如何在C / C ++中释放数组

int main() { // Will this code cause memory leak? // Do I need to call the free operator? // Do I need to call delete? int arr[3] = {2, 2, 3}; return 0; } 这段代码是否会造成内存泄漏? arr在哪里居住? 在堆栈或RAM中?

C编程 – 将指针返回到释放状态

我有一个函数foo(),它分配内存并返回它。 在我的主要function结束时,将它释放是我的标准做法吗? char* foo(){ char * p; p = malloc(sizeof(char) * 4); /* edit – thanks to msg board */ p[0] = ‘a’; p[1] = ‘b’; p[2] = ‘c’; p[3] = ‘/0’; /* edit: thanks to the msg board. */ return p; } int main(int argc, char *argv[]) { char * p2; p2 = foo(); […]

Valgrind报告说getaddrinfo正在泄漏内存?

我一直在我们的项目上运行Valgrind,并且valgrind报告说,尽管在函数的底部调用了freeaddrinfo,但是从getaddrinfo的调用中已经丢失了内存。 知道是什么原因造成的吗? int tcp_connect(char *address, char *port) { //printf(“%s\n “, address); int status, sockfd; struct addrinfo hints, *servinfo, *p; memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype= SOCK_STREAM; status = getaddrinfo(address,port,&hints,&servinfo); if(status != 0){ printf(“tcpconnect: getaddrinfo failed\n”); } for(p = servinfo; p != NULL; p = p->ai_next) { sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol); if(sockfd == […]

C中的GetTotalMemory分配

我想在调用函数之前和之后分配总内存,以确定我是否已正确释放所有内容。 我在C中这样做,我很生疏,所以如果这是一个天真的问题请原谅我。 我正在寻找类似于C#GC.GetTotalMemory(true)的东西,现在在Windows中。 现在我正在使用PROCESS_MEMORY_COUNTERS_EX和GetProcessMemoryInfo(…) ,在调用函数之前和之后但是我无法对输出做出正面或反面,因为如果我进入函数并注释掉一个free(…)的调用free(…)然后它会给我相同的结果(之后总是更大)。 这就是我现在所拥有的…… GetProcessMemoryInfo(hProc, &before, sizeof(before)); r = c->function(); GetProcessMemoryInfo(hProc, &after, sizeof(after)); if(r->result != 0) { printf(“error: %s\r\n”, c->name); printf(” %s\r\n”, r->message); printf(” %s (%d)\r\n”, r->file, r->line); failed++; } else if(after.PrivateUsage > before.PrivateUsage) { printf(“memory leak: %s\r\n”, c->name); printf(” %d kb\r\n”, after.PrivateUsage – before.PrivateUsage); failed++; } else succeeded++; 得到这样的结果: after.PrivateUsage – before.PrivateUsage […]

为什么没有内存泄漏?

以下内容旨在获取一个可变长度的常量char,并以一种很好的格式打印出来以进行日志记录。 我相信读者会对如何改进这方面提出建议,我对此表示欢迎。 令我困惑的是,我希望每次调用ToHexString()时都需要free()返回的静态char。 相反,我认为没有任何内存泄漏。 即使我使用内联函数,因此也不会将其返回值赋给变量。 我创建了一个简单的测试,在循环中调用此函数,每次使用不同长度的cString和nMaxChars参数。 然后我看了VM的状态。 我的测试程序和可用内存的内存分配从未改变。 在我看来,每次调用malloc并且没有空闲时它应该增加。 static char *ToHexString(const char *cString,int nMaxChars) { static char *cStr; /*if (80>strlen(cString)) nRawChars=strlen(cString); if (nMaxChars>nRawChars) nRawChars=nMaxChars; */ if (nMaxChars==0) nMaxChars=80; printf(“There are %i chars\n”,nMaxChars); char *cStr1; char *cStr2; char *cStr3; int nLen=nMaxChars*6; cStr=calloc(nLen,sizeof(char)); cStr1=calloc(10,sizeof(char)); cStr2=calloc(nLen,sizeof(char)); cStr3=calloc(nLen,sizeof(char)); cStr1[0]=’\0′; cStr2[0]=’\0′; cStr3[0]=’\0′; int nC1=0; int nRowCnt=0; for (nC1=0;nC1<nMaxChars;nC1++) { […]

在OSX 10.9.5上的libc中的wordexp是否已泄漏?

在OSX wordexp上的wordexp是否已知泄漏内存? 如果没有,我的代码有什么问题? 在我自己的运行OSX 10.10.5的本地机器上,我通过Valgrind运行我的代码并且没有丢失的字节 。 我的Ubuntu Linux机器上也没有泄漏 。 但是,当我在使用OSX 10.9.5的 travis-ci帐户上启用valgrind检查时,我突然从wordexp内部分配的内存中泄漏,即使我使用wordfree释放它,因为手册页描述: ==8968== LEAK SUMMARY: ==8968== definitely lost: 1,024 bytes in 1 blocks ==8968== indirectly lost: 0 bytes in 0 blocks ==8968== possibly lost: 0 bytes in 0 blocks OSX 10.9.5 uname输出: Darwin 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 […]

C – 使用双指针的动态内存分配

我在函数名myalloc()中分配一些内存,并在main()中使用和释放它。 我正在使用双指针来执行此操作,这里的代码工作正常, //Example # 1 #include #include #include void myalloc( char ** ptr) { *ptr = malloc(255); strcpy( *ptr, “Hello World”); } int main() { char *ptr = 0; myalloc( &ptr ); printf(“String is %s\n”, ptr); free(ptr); return 0; } 但是下面的代码不起作用并给出了分段错误。 我认为这是使用双指针的另一种方法。 //Example # 2 #include #include #include void myalloc( char ** ptr) { *ptr […]