学习了动态数组长度的扩充,写了一个很简单的程序,动态扩充数组的长度。
你是 debug 模式运行的吧?
这里意思 p 指针已经被释放内存了, 它指向的内存空间是未知的,所以这个显示错误。
不过 p = NULL 是对的,可以避免后续有人再直接使用 p指针
问题在第11行:p = malloc(sizeof(*p)*num1); 应修改为:p = (int *)malloc(sizeof(int)*num1);
因为malloc()没指定类型生成的是 void * p,与定义的 int *p;是不同类型的,且 sizeof(*p)也是不对的。
整体修改如下,改动处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, num1, num2;
int* p;
scanf("%d", &num1);
p = (int *)malloc(sizeof(int) * num1); //p = malloc(sizeof(*p) * num1); 修改
scanf("%d", &num2);
p = (int *)realloc(p, sizeof(int) * num2); // realloc(p, sizeof(int) * num2); 修改
for (i = 0; i < num2; i++)
scanf("%d", (p + i));
for (i = 0; i < num2; i++)
printf("%d\x20", *(p + i));
printf("\n");
free(p);
p = NULL;
return 0;
}
【相关推荐】
核心:从数据的第一个元素开始,依次比较,直到找到目标数据或查找失败。
1.从表中的第一个元素开始,依次与关键字比较。
2.若某个元素匹配关键字,则 查找成功。
3.若查找到最后一个元素还未匹配关键字,则 查找失败。
顺序查找对表中元素的排序无要求,这些元素在表中可以任意排序,这使得顺序查找的适应性很高。顺序查找的实现很简单,其示例代码如下:
#include "stdio.h"
void main(){
int a[10],num,i,flag; /*变量定义*/
printf("Please input numbers: ");
for(i=0;i<=9;i++){
scanf("%d",&a[i]); /*接收输入的数组*/
}
printf("Please finding numbers: ");
scanf("%d", &num); /*接收关键字*/
for(i=0;i<=9;i++){
if(a[i]=num){ //查找到所需的元素,跳出循环
flag=1;
break;
}
}
if(i==10){
flag=0;
}
if(flag){
printf("The numbers find!\n");
}
else{
printf("The numbers No find!\n");
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载