我將內存分配給指向它可能具有的最大字符大小的指針。 然後,我不得不編寫代碼,它將根據從文件中讀取的值更改其值,並且我需要知道指針中的值的長度是多少,所以我使用了strlen()
函數。strlen和空閒內存
我得到了我需要的東西。 當我試圖釋放該指針的內存時發生問題。該程序崩潰了,我假設我正在做一些「迴腸」,並想知道爲什麼以及如何解決它。
這裏是代碼的一部分:
char *StudID = (char*)malloc(sizeof(char)*15);
char *StudIDcpy = (char*)malloc(sizeof(char) * 15);
fread(stud[i].ID, sizeof(char), 4, in);
stud[i].ID[4] = '\0';
IDtemp = atoi(stud[i].ID);//convert ID string to integer and store value in IDtemp
StudIDcpy = itoba(IDtemp);//convert integer to binary number as a string
strcpy(StudID, StudIDcpy);
IDtemp = strlen(StudIDcpy);
free(StudIDcpy); // <---- I BELIEVE THIS IS WHERE IT CRASHES
這裏是我的itoba()
功能:
char *itoba(int a){
int i = 0, j;
char temp[15];
while(a){
if (a % 2)temp[i] = '1';
else temp[i] = '0';
i++;
a = a/2;
}
temp[i] = '\0';
for (j = 0; j < i/2; j++)swapc(&temp[j], &temp[i - j-1]);
return temp;
}
當我知道我沒有寫sizeof(char)
,因爲它等於1的方式,但我反正寫它,所以我記得應該在那裏放置什麼樣的價值。
方便查看'itoba'的代碼 –
我添加了代碼itoba – Dani
'return temp;'返回一個指向局部變量的指針,當函數退出時它會消失。 –