gpt4 book ai didi

c - 在c中复制数组的一部分时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:46:10 25 4
gpt4 key购买 nike

我这里有一个函数可以将数组的一部分(从头到尾)复制到一个新数组。当我运行代码时,我最终遇到了段错误。我知道当我没有为数组分配足够的空间或当我尝试访问尚未分配的内存时会发生段错误。但是对于我的 len,我已经将它设置为 last-first+1,这应该足以包含我要复制的数组部分。但为什么它仍然给我段错误?还是我遗漏了什么?

这是我完成的代码的结构:

typedef struct {
int* data;
unsigned int len;
} intarr_t;

这是将数组的一部分复制到新数组的函数:

intarr_t* intarr_copy_subarray( intarr_t* ia, 
unsigned int first,
unsigned int last )
{
unsigned int len = last-first+1;
intarr_t* newia = malloc(sizeof(intarr_t));
assert (newia);
newia->data = malloc(sizeof(int)*len);
assert (newia->data);
newia->len = len;
if (newia == 0 || ia == NULL || last < first)
{
return NULL;
}
else
{
for (int x = first; x <= last; x++)
{
memcpy (newia->data[x], ia->data[x], (len*sizeof(int)));
}
return newia;
}
free (newia);
return 0;
}

最佳答案

更改这些语句

    for (int x = first; x <= last; x++)
{
memcpy (newia->data[x], ia->data[x], (len*sizeof(int)));
}

memcpy ( newia->data, ia->data + first, len * sizeof( int ) );

或到

    for ( unsigned int i = 0; i < len; i++ )
{
newia->data[i] = ia->data[i + first];
}

也是这个条件

if (newia == 0 || ia == NULL || last < first)
{
return NULL;
}

是错误的。您必须释放此 block 中分配的内存,以防 ia 等于 NULL 或 last

您应该在分配内存之前检查这些条件。

关于c - 在c中复制数组的一部分时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27195586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com