c - 为什么第二个 malloc 在这种情况下会失败?
问题描述
我目前正在处理一段代码,我们正在解析文件并使用不同的函数。通过printf
调用调试,我发现第二次malloc
调用时出现内存错误。什么可能导致第二个malloc
在这个粗糙的骨架中失败?
struct example {
char *myChar;
int myInt;
};
struct example *doThing(FILE *file) {
struct example *myToken = (struct example *)malloc(sizeof(struct example));
char buffer[32] = "";
// other stuff
if (strncmp(buffer, "random", 6) == 0) {
strncpy(myToken->myChar, buffer, 6);
myToken->tokenid = 1;
return myToken;
}
return NULL;
}
struct example *doThing2(FILE *file) {
struct example *myOtherToken = (struct example *)malloc(sizeof(struct example));
// other stuff
return myOtherToken;
}
int main() {
FILE *ofp = fopen("thefile.txt", "r");
struct example *token1, *token2;
token1 = doThing(ofp);
token2 = doThing2(ofp);
// other stuff
free(token1);
free(token2);
return 0;
}
解决方案
您正面临内存泄漏。按照以下两个示例之一更正您的代码
是的,正如@Eugene_Sh 所提到的,您应该分配内存myToken->myChar
并且不要忘记在释放 myToken 之前释放它
struct example* doThing(FILE *file) {
char buffer[32] = "";
// other stuff
if (strncmp(buffer, "random", 6) == 0) {
struct example *myToken = (struct example *) malloc(sizeof(struct example));
myToken ->myChar= malloc(7);
strncpy(myToken ->myChar, buffer, 6);
myToken ->myChar[6]=0;
myToken->tokenid = 1;
return myToken;
}
return NULL;
}
样品 2
struct example* doThing(FILE *file) {
struct example *myToken = (struct example *) malloc(sizeof(struct example));
char buffer[32] = "";
// other stuff
if (strncmp(buffer, "random", 6) == 0) {
myToken ->myChar= malloc(7);
strncpy(myToken ->myChar, buffer, 6);
myToken ->myChar[6]=0;
myToken->tokenid = 1;
return myToken;
}
free(myToken );
return NULL;
}
推荐阅读
- python - Yahoo Finance Api 可以检索索引数据(特别是 Nifty)吗?
- java - 在 IntelliJ 中并行运行同一个 gradle 任务
- java - Java中实际参数列表和形式参数列表的长度不同
- c# - 在字典 C# 中使用 LinkedList?以及如何实现它的操作?
- r - 'sentimentr' 包有意大利语词典吗?
- sql - 如何从 DataGrip 执行 PL/SQL 过程
- python - 如何在python中以不同颜色显示从负值到正值的图像值
- java - 如何在 Spring Boot 中验证服务层中的数据
- python - 扫雷 AI 将地雷标记为安全地点
- php - Symfony:控制 security.yaml 外部的路由