pkqbszs 发表于 2023-1-2 12:05:48

Program received signal SIGTRAP, Trace/breakpoint trap

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

#define INCREMENT 10
#define INIT_SIZE INCREMENT


int main()
{
        char ch;
        char *str;
        char *last;
        int limit = 0;
        int times = 1;
        int count = 0;
       
        str = (char *)malloc(sizeof(char) * INCREMENT);
       
        if(str == NULL)
        {
                exit(1);
        }
       
        last = str;
       
        printf("请输入一个字符串:");
       
        while((ch = getchar()) != '\n')
        {
                last = ch;
                if(limit >= INCREMENT)
                {
                        str = (char *)realloc(str, INCREMENT * times + INCREMENT);
                        last += 10;
                }
                count++;
        }
       
        last = '\0';
       
        printf("反转后的结果是:");
        for(int i = count;i >= 0;i--)
        {
                printf("%c", str);       
        }
       
        return 0;
}
请问这个报错是什么意思呀,不太理解为什么,我输入I love FishC! 翻转后会出现乱码,有的时候就不会出现乱码

人造人 发表于 2023-1-2 13:25:24

执行完33行之后,last还指向str吗?

人造人 发表于 2023-1-2 13:39:04

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

#define INCREMENT 10
#define INIT_SIZE INCREMENT


int main()
{
      char ch;
      char *str;
      char *last;
      int limit = 0;
      int index = 0;
      int times = 1;
      int count = 0;
      
      //str = (char *)malloc(sizeof(char) * INCREMENT);
      str = malloc(INCREMENT);    // 没有必要强制转换,没有必要乘以sizeof(char)
                                    // 因为 sizeof(char) == 1
      
      if(str == NULL)
      {
                exit(1);
      }
      
      last = str;
      limit = INCREMENT;
      
      printf("请输入一个字符串:");
      
      while((ch = getchar()) != '\n')
      {
                last = ch;
                if(index >= limit)
                {
                        //str = (char *)realloc(str, INCREMENT * times + INCREMENT);
                        str = realloc(str, INCREMENT * times++ + INCREMENT);
                        last = str;
                        limit += INCREMENT;
                }
                count++;
      }
      
      last = '\0';
      
      printf("反转后的结果是:");
      for(int i = count;i >= 0;i--)
      {
                printf("%c", str);
      }
      
      free(str);      // 内存也不释放?谁教给你的?
      printf("\n");   // 行也不换
      
      return 0;
}

人造人 发表于 2023-1-2 13:53:02

本帖最后由 人造人 于 2023-1-2 13:54 编辑

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

#define INCREMENT 10

int main(void) {
    char *str = NULL;
    size_t index = 0;
    size_t limit = 0;
    printf("请输入一个字符串:");
    while(1) {
      int ch = getchar();
      if(ch == '\n' || ch == EOF) break;
      if(index >= limit) {
            char *temp = realloc(str, limit += INCREMENT);
            if(!temp) {free(str); return -1;}
            str = temp;
      }
      str = ch;
    }
    printf("反转后的结果是:");
    while(--index != -1) putchar(str);
    puts("");
    free(str);
    return 0;
}

pkqbszs 发表于 2023-1-2 17:27:56

人造人 发表于 2023-1-2 13:39


谢谢哥,明白了
页: [1]
查看完整版本: Program received signal SIGTRAP, Trace/breakpoint trap