c程序 动态数组长度的扩充

学习了动态数组长度的扩充,写了一个很简单的程序,动态扩充数组的长度。

img


结果在运行的时候:

img


出现了上述的报错,但是程序最后的运行结果是正确的

img


看到的小伙伴有知道这是咋回事嘛?非常感谢小伙伴的回答,这会是对我最大的帮助!

你是 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;
}

【相关推荐】



  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7528921
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:c语言实现:输入一行字符串,统计该字符串中所有字符出现的个数,并找到出现次数最大的那个字符!!
  • 您还可以看一下 任大勇老师的数据分析思维及方法课程中的 归集数据指标,数据指标拆解与确定数据维度小节, 巩固相关知识点
  • 除此之外, 这篇博客: C语言实现顺序查找中的 算法思想:遍历整个数组,依次将数组中的每一个元素与待查找的数据进行比较,若没找到,则停止循环,输出其位置值;如果遍历结束,都没有找到符合条件的数,则输出“没找到”等提示信息。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    核心从数据的第一个元素开始,依次比较,直到找到目标数据或查找失败

                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");
    	}
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^