我刚刚问了一个问题并得到了帮助,但我的自定义c字符串有另一个问题。一切都编译好,但当我试图得到它冻结的东西,或者它可能是当我删除它。我究竟做错了什么?继承我的代码:
的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 :(得分:1)
这是一个提示:您正在正确管理字符缓冲区的内存,但是您忘记了管理String结构本身的内存。
答案 1 :(得分:0)
String *temp = NULL;
temp->length = strlen(basic_string);
您尚未为temp
分配内存。
答案 2 :(得分: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);
}