You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言指针实现升序数组插入元素异常问题求助

问题分析与解决

你的代码在插入元素时出现首元素丢失,核心有两个问题:

1. 未对数组扩容

原数组通过malloc分配了n个int的内存空间,插入新元素后数组长度变为n+1,不扩容的话既无法容纳新元素,还会导致内存操作越界,直接覆盖原有数据。

2. 插入逻辑完全错误

  • 循环for (int * current = p; current != p + 1; ++current)毫无意义,仅会执行一次,且起始位置错误;
  • 当pos == p时,*(pos-1)访问了数组首元素之前的非法内存,属于未定义行为;
  • 没有正确从后往前移动元素腾出插入位置,反而直接覆盖了原有元素。

修正后的完整代码

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

int main() {
    int i, n, *p, v;
    printf("\n Entrer la taille du tableau:");
    scanf("%d", &n);
    // 分配初始数组内存,增加空指针检查
    p = malloc(n * sizeof(int));
    if (p == NULL) {
        printf("内存分配失败\n");
        return 1;
    }

    printf("Enter l'élément(s) 1:");
    scanf("%d", p);

    // 初始输入时强制保持升序
    for (i = 1; i < n; i++) {
        do {
            printf("Enter l'élément(s) %d:", i + 1);
            scanf("%d", (p + i));
        } while (p[i] < p[i - 1]);
    }

    printf("\n Affichage du tableau\n");
    for (i = 0; i < n; i++) {
        printf("%d ", *(p + i));
    }

    /* 插入新元素到数组并保持升序 */
    printf("\n Entrer la valeur de v: ");
    scanf("%d", &v);

    // 1. 扩容数组,长度变为n+1,检查扩容是否成功
    int *new_p = realloc(p, (n + 1) * sizeof(int));
    if (new_p == NULL) {
        printf("内存扩容失败\n");
        free(p);
        return 1;
    }
    p = new_p;
    n += 1; // 更新数组长度

    // 2. 找到插入位置:第一个大于v的元素的地址
    int *insert_pos = p;
    while (insert_pos < p + n - 1 && *insert_pos < v) {
        insert_pos++;
    }

    // 3. 从后往前移动元素,腾出插入位置
    for (int *current = p + n - 1; current > insert_pos; current--) {
        *current = *(current - 1);
    }

    // 4. 插入新元素
    *insert_pos = v;

    // 输出结果
    printf("\n插入后的数组:\n");
    for (int *current = p; current != p + n; ++current) {
        printf("%d ", *current);
    }
    putchar('\n');

    free(p);
    return 0;
}

关键修改说明

  • 内存扩容:使用realloc重新分配内存,同时检查分配是否成功,避免内存泄漏;
  • 插入位置查找:遍历数组找到第一个大于待插入值的位置,确保插入后数组保持升序;
  • 元素移动:从数组末尾开始向前移动元素,避免覆盖未移动的数据;
  • 更新数组长度:插入后将数组长度n加1,保证后续遍历和操作的正确性。

内容的提问来源于stack exchange,提问作者Med talib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:50:26