#include<stdio.h>
swap_(char c,char *p)
{
int fang=0
char *ep=p
while(*ep)
{
if(c==*ep)
{ fang=1 break}
ep++
}
printf("%d",fang)
return fang
}
main()
{
char s[11],i
char ch
printf(" Input in English \n")
scanf("%s",s)
printf("input in ch\n")
getchar()
scanf("%c",&ch)
i=swap_(ch,s)
if(i==1)
printf(" Character exist! \局伏春桐耐n"厅答)
else
printf(" Character not exist! \n")
}
ptr = malloc(10)ptr = str1
上面这个处理有问题,
你将ptr指向新申请的空间后,
又将它指向了str1这个地址,
这导致了两个问题:
1. 之前分配的malloc(10)这个内存变成了野地址对应的内存
2. free(ptr)这一句变成了释放str1指向内渣余存,str1是一个常量区,进行free *** 作是错误的
ptr = malloc(10)
ptr=str2
这两句也一样
应该如物滚这么改:
#include <stdio.h>
#include <malloc.h>
#include <蚂粗string.h>
int main(void)
{
char *ptr=NULL
char str1[] = "hello"
char str2[] = "wo"
ptr = (char*)malloc(10)
strcpy(ptr,str1)
printf("ptr_len=%d\n",strlen(ptr))
free(ptr)
ptr = NULL
ptr = (char*)malloc(10)
strcpy(ptr,str2)
printf("ptr_len after-free=%d\n",strlen(ptr))
free(ptr)
ptr = NULL
}
===========================================
比如:char *ptr="hello"
如何清除ptr指向的内容呢?
"hello"是常量,不用手动释放,
这里的ptr不用释放的。
#include<stdio.h>void main ()
{
int i = 0
int t = 0
int ss[10] = {0}
int nMaxIndex = 0
int nMinIndex = 0
// 输入数据数据
printf("请输入10个数,以逗号隔开:\n")
for (i = 0i <10i++)
scanf("%d", &ss[i])
/胡耐/ 记录最大值和最小值的索引
for (i = 1i <10i++)
{
if (ss[i] >ss[nMaxIndex])
nMaxIndex = i
if (ss[i] <ss[nMinIndex])
nMinIndex = i
}
// 交换最大值与数组[0]
t = ss[0]
ss[0] = ss[nMaxIndex]
ss[nMaxIndex] = t
// 交换最小值与数组[9],如果最小值的索引刚好是数组[0],应交换最大值大拍的索引
if (nMinIndex == 0)
nMinIndex = nMaxIndex
t = ss[9]
ss[9] = ss[nMinIndex]
ss[nMinIndex] = t
for (i = 0i <10i++)
printf("%4d", ss[i])
}
// 如果可以调换数组中的其他元素,就直接做个降序排裤仿春列
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)