LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1026|回复: 3

我分配内存出现"段错误"

[复制链接]
发表于 2004-3-16 10:44:56 | 显示全部楼层 |阅读模式
为了测试,我写了个简单的程序,但是出现"段错误"!!.....谢谢大家,
/*程序名字:memory.c*/
/*程序目的:测试分配内存是否出错*/
/*程序作者:叶知秋*/
#include <stdio.h>
#include <string.h>

char *upcase(char *inputstring);

int main(void)
{
        char *str1,*str2;
        str1 = upcase("yzq");
        printf("str1=%s\n",str1);
        free(str1);
        return 0;
}

char *upcase(char *inputstring)
{
        char *newstring;
        int counter;
        /*if(newstring!=malloc(strlen(inputstring)+1))
        {
                printf("ERROR ALLOCATING MEMEORY\n");
        }*/
        strcpy(newstring,inputstring);
        for(counter=0;counter<strlen(newstring);counter++)
        {
                if(newstring[counter]>=97&&newstring[counter]<=122)
                        newstring[counter]-=32;
        }
        return newstring;
发表于 2004-3-16 11:02:13 | 显示全部楼层
我正在上课,没有linux,我在windows下的turboc2的环境下编译成功
不过提示了
Null pointer Assignment
发表于 2004-3-16 11:43:26 | 显示全部楼层

  1. /*程序名字:memory.c*/
  2. /*程序目的:测试分配内存是否出错*/
  3. /*程序作者:叶知秋*/
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7.                                                                                 
  8. char *upcase(char *inputstring);
  9.                                                                                 
  10. int main(void)
  11. {
  12.     char *str1,*str2;
  13.     str1 = upcase("yzq");
  14.     printf("str1=%s\n",str1);
  15.     if(str1 != NULL)
  16.         free(str1);
  17.     return 0;
  18. }
  19.                                                                                 
  20. char *upcase(char *inputstring)
  21. {
  22.     char *newstring;
  23.     int counter;
  24.     newstring = (char*)malloc(strlen(inputstring)+1);
  25.     if(newstring == NULL)
  26.     {
  27.         printf("ERROR ALLOCATING MEMEORY\n");
  28.         return NULL;
  29.     }
  30.     strncpy(newstring,inputstring, strlen(inputstring));
  31.     for(counter=0;counter<strlen(newstring);counter++)
  32.     {
  33.         if(newstring[counter]>=97&&newstring[counter]<=122)
  34.             newstring[counter]-=32;
  35.     }
  36.     return newstring;
  37. }
复制代码
 楼主| 发表于 2004-3-16 13:52:09 | 显示全部楼层

re

谢谢了!!!叫你一声好哥哥!!! ;)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表