我處理一個包含int和整數錯誤釋放一個結構
這裏有我的兩個功能的陣列結構內的數組時:
//stores array of char numbers in array of ints
//returns pointer to SomeStruct
SomeStruct *fromString(char *str){
/*get string length*/
int length = strlen(str);
SomeStruct *huge;
huge = malloc(sizeof(SomeStruct));
/* incase malloc() fails */
if (huge == NULL) {
return NULL;
}
huge->length = length;
huge->digits = malloc((sizeof(int))*length);
/*store chars as ints*/
int i;
for(i=0;i<length;i++){
if (str[i] == ""){
huge->digits[i] = 0;
}
if (str[i] == '0'){
huge->digits[i] = 0;
}
if (str[i] == '1'){
huge->digits[i] = 1;
}
if (str[i] == '2'){
huge->digits[i] = 2;
}
if (str[i] == '3'){
huge->digits[i] = 3;
}
if (str[i] == '4'){
huge->digits[i] = 4;
}
if (str[i] == '5'){
huge->digits[i] = 5;
}
if (str[i] == '6'){
huge->digits[i] = 6;
}
if (str[i] == '7'){
huge->digits[i] = 7;
}
if (str[i] == '8'){
huge->digits[i] = 8;
}
if (str[i] == '9'){
huge->digits[i] = 9;
}
}
return huge;
}
和
//frees mem
//returns NULL ptr to struct
SomeStruct *destroy(SomeStruct *p){
/*free each cell*/
int i;
for(i=0;i<getLength(p);i++){
free(p->digits[i]);
}
/*free p & return NULL*/
free(p);
p=NULL;
return p;
}
和繼承人我的示例主要()
int main(){
SomeStruct *z;
z = malloc(sizeof(SomeStruct));
z = fromString("100100987654321");
//printcheck
int i;
for(i=0;i<getLength(z);i++){
printf("%d", z->digits[i]);
}
printf("\n");
destroy(z);
return 0;
}
我編譯後,得到正確的打印輸出100100987654321,但一旦其命中破壞功能,我得到以下錯誤:malloc:*錯誤的對象0x2:被釋放的指針未分配。我玩弄破壞函數和免費(P)單獨不拋出一個錯誤,但當我嘗試釋放數組中的任何東西(P - >數字)時,我得到該錯誤消息。我認爲這個錯誤與fromString函數中的malloc有關,但是如何?感謝
'str [i] ==「」'意思是什麼? –
哎呦並不意味着在那裏。謝謝 – user2755244
您要麼不啓用警告,要麼不關注它們。糟糕的做法。您希望在儘可能高的警告級別發出零警告。 –