gpt4 book ai didi

c - 我正在丢失内存分配吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:45:03 24 4
gpt4 key购买 nike

我需要使用 malloc 将最终的 char * 传递给另一个函数。Valgrind 提示我没有初始化 *temp,所以我使用了 malloc。我的问题是没有分配内存?我一直在摆弄这个问题,不知道如何解决它。

我是否在 for 循环 for temp 期间丢失了内存分配?

然后再次使用 sprintf 获取 newCatID?

如有任何建议,我们将不胜感激。

char *allocateCategoryID(ThisType *menu)
{
char catID[ID_LEN]="";
char *temp;
char *newCatID;
char *end;
int idNum=0;
int i=0;
int j = 0;
temp = malloc(ID_LEN-1);
newCatID = malloc(ID_LEN*sizeof(char));

/*get catID which strlen(catID)= ID_LEN*/


for(i=1; i<ID_LEN; i++)/*FIRST VALGRIND ERROR IS HERE*/
{
temp[j]= catID[i];
j++;
}

idNum = strtol(temp, &end, 10);/*NEXT VALGRIND ERROR IS HERE*/
idNum++;

sprintf(newCatID, "C%04i", idNum);/*NEXT VALGRIND ERROR IS HERE*/

printf("New Category ID: %s\n", newCatID);/*NEXT VALGRIND ERROR IS HERE*/
free(temp);
return newCatID;
}

Invalid write of size 1
0 bytes after a block of 4 alloc'd
Invalid read of size 1
0 bytes after a block of 5 alloc'd
Invalid write of size 1
0 bytes after a block of 5 alloc'd
Invalid read of size 1
0 bytes after a block of 5 alloc'd

最佳答案

在此循环的最后一次迭代中:

for(i=1; i<ID_LEN; i++)/*FIRST VALGRIND ERROR IS HERE*/
{
temp[j]= catID[i];
j++;
}

你越界了,因为你为 LEN - 1 分配了空间

temp = malloc(ID_LEN-1);

更改为

temp = malloc(ID_LEN);

for(i = 1; i < ID_LEN; i++)
{
temp[j] = catID[i];
j++;
}
/* here you need to add the trailing '\0' */
temp[j] = '\0';

关于c - 我正在丢失内存分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25385341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com