2011-11-26 48 views
1

我刚刚问了一个问题,并得到了帮助,但我有我的自定义C字符串的另一个问题。一切都编译好,但当我试图让它冻结,或者它可能是当我删除它。我究竟做错了什么?继承人我的代码:当我尝试从字符串stuct获取数据时,应用程序会冻结?

的main.c

#include <stdio.h> 
#include "String.h" 

int main(int argc, char *argv[]) { 
    String *some_string = String_New("hello"); 
    printf("%s\n", String_CharPtr(some_string)); 
    String_Delete(some_string); 
    return 0; 
} 

STRING.H

#ifndef _STRING_H 
#define _STRING_H 

typedef struct String String; 

extern String *String_New(char */*basic_string*/); 
extern void String_Delete(String */*string*/); 
extern char *String_CharPtr(String */*string*/); 
extern unsigned int String_GetLength(String */*string*/); 
extern unsigned int String_GetSize(String */*string*/); 

#endif 

最后:

String.c

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <malloc.h> 

#include "String.h" 

struct String { 
    char *basic_string; 
    unsigned int length; 
}; 

String *String_New(char *basic_string) { 
    String *temp = NULL; 
    temp->length = strlen(basic_string); 
    temp->basic_string = (char *) malloc(temp->length + 1); 
    strcpy(temp->basic_string, basic_string); 
    return temp; 
} 

void String_Delete(String *string) { 
    free(string->basic_string); 
    string->basic_string = NULL; 
} 

char *String_CharPtr(String *string) { 
    return string->basic_string; 
} 

unsigned int String_GetLength(String *string) { 
    return string->length; 
} 

unsigned int String_GetSize(String *string) { 
    return string->length + 1; 
} 

回答

0
String *temp = NULL; 
temp->length = strlen(basic_string); 

您尚未为temp分配内存。

+0

哦,我忘了所有关于它 – evolon696

1

这里是一个暗示:你正在正确地管理内存字符缓冲区,但是您已经忘记了管理String结构本身的内存。

0

这不起作用。改变你的代码的一部分到这个:

#include <stdlib.h> 
... 
String *String_New(char *basic_string) { 
    String *temp = calloc (1, sizeof (struct String)); 
    temp->length = strlen (basic_string); 
    temp->basic_string = strdup (basic_string); 
    return temp; 
} 

void String_Delete(String *string) { 
    free(string->basic_string); 
    free (string); 
} 
相关问题