c - 当我尝试从字符串结构中获取数据时应用程序卡住?

标签 c string

我最近刚问了一个问题并得到了帮助,但我的自定义 C 字符串还有另一个问题。一切都可以正常编译,但是当我尝试获取某些东西时它会卡住,或者可能是当我删除它时。我究竟做错了什么?这是我的代码:

主.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;
}

字符串.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

最后:

字符串.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;
}

最佳答案

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

关于c - 当我尝试从字符串结构中获取数据时应用程序卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281811/

相关文章:

c - 如何删除这个(不可移植的)嵌套函数?

C - 在线程中使用 sigsuspend 不起作用

c++ - 指针可以指向4GB之后的地址吗?

string - 何时使用 Rabin-Karp 或 KMP 算法?

c++ - 使用 std::map 检查字符串是否包含重复项

C - 如何提示用户输入文件名

计算执行该程序时c程序中上下文切换的次数

php - 从php中的字符串中删除转义序列

c# - 为什么是 str = str.Replace().Replace();比 str = str.Replace(); 快str = str.替换()?

python - if 语句不适用于抓取的网页文本