【问题标题】:there is trace/breakpoint trap when using pointer in c在 c 中使用指针时存在跟踪/断点陷阱
【发布时间】:2020-02-03 13:45:36
【问题描述】:
#include <stdio.h>
#include <malloc.h>
//#include "ans.c"

int *decompressRLElist(int *nums, int numsSize, int *returnSize);

int main()
{
    int nums[] = {39, 1};
    int length = 2;
    int returnlength;
    int *p = decompressRLElist(nums, length, &returnlength);
    int *pp = p;
    while (returnlength-- != 0)
    {
        putchar(*(p++)+'0');
    }
    system("pause");
    return 0;
}

int *decompressRLElist(int *nums, int numsSize, int *returnSize)
{
    int *ans = (int *)malloc(100);
    int *p = ans;
    *returnSize = 0;
    numsSize /= 2;
    while (numsSize-- != 0)
    {
        while ((*nums)-- != 0)
        {
            *(p++) = *(nums + 1);
            (*returnSize)++;
        }
        nums += 2;
    }
    return ans;
}

我正在处理一个 leetcode 问题,在运行调试器后,发生了一个名为跟踪/断点陷阱的异常。令人困惑的是,数组长度小于39时不会出错,但大于或等于39时会出错。

【问题讨论】:

    标签: c


    【解决方案1】:

    一个整数通常是 4 个字节,虽然它可以根据您的系统而有所不同,所以当您分配 100 个字节时,它只适用于 25 个整数,您应该使用:

    int *ans = malloc(100 * sizeof(*ans));
    

    malloc 演员也是不必要的。

    错误仅从数组大小 39 开始的事实只能归因于未定义的行为。

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2021-01-14
      • 2018-05-20
      相关资源
      最近更新 更多