gpt4 book ai didi

c - 为什么这段代码会导致段错误错误?

转载 作者:行者123 更新时间:2023-11-30 16:48:19 26 4
gpt4 key购买 nike

因此,正如标题所示,我需要帮助解决我编写的一段代码,该代码导致段错误,代码如下:

vector* reads_file(char* name)
{
vector *vec = vector_new(); //creates a new vector with capacity = 0, size = 0 and elements = NULL
char *str_aux;
FILE *fp = fopen(name, "r");


if(fp == NULL){
printf("Error\n");
return NULL;
}


while(fgets(str_aux, BUFFER_SIZE, fp) != NULL){
if(vextor_inserts(vec, str_aux, -1) == -1)
return NULL;
free(str_aux);
}

fclose(fp);

return vec;
}

和:

int vector_inserts(vector* vec, const char* value, int pos)
{
int i, n;

if(vec == NULL || pos < -1 || pos > vec->size)
return -1;

/* increases vector's elements if there's not enough capacity */
if(vec->size == vec->capacity)
{
if(vec->capacity == 0)
vec->capacity = 1;
else
vec->capacity *= 2;

vec->elements = (v_element*)realloc(vec->elements, vec->capacity * sizeof(v_element));
if(vec->elements == NULL)
return -1;
}

/* if pos=-1 inserts in the end of the vector */
if(pos == -1)
pos = vec->size;

/* copies every element from the pos position till the end of the vector to pos+1 */
for(i=vec->size-1; i>=pos; i--)
{
vec->elements[i+1] = vec->elements[i];
}

/* allocates space for the new string on position pos */
vec->elements[pos].str = (char*)calloc(strlen(value)+1, sizeof(char));
if(vec->elements[pos].str == NULL)
return -1;

/* copies value */
strcpy(vec->elements[pos].str, value);

vec->size++;

return pos;
}

其结构是:

typedef struct
{
char *str;

} v_element;

typedef struct
{
/** total number of the vector's elements */
int size;

/** vector's capacity */
int capacity;

/** array of stored elements */
v_element* elements;

} vector;

哦还有

#define BUFFER_SIZE  256

它编译得很好(当使用另一段具有调用reads_file(...)函数的主函数的代码时),但是在执行它时,它在调用vector_inserts(...)期间发生了段错误。 )函数,但是为什么会发生这种情况呢?我想不通。在我看来,没有任何指针被错误调用。

如有任何帮助,我们将不胜感激

最佳答案

   for(i=vec->size-1; i>=pos; i--)
{
vec->elements[i+1] = vec->elements[i];
}

vec->size-1 是 vector 中最后一个元素的索引。vec->elements[i+1] 已经结束了。

尝试 for(i=vec->size-2; i>=pos; i--)

注意:您真的、真的、真的、真的需要使用调试器运行这段代码来检查到底发生了什么,特别是在需要增加/减少和/或首先/容量的极端情况下引用了 ast 元素。 obi-wan 错误就是这么容易......

关于c - 为什么这段代码会导致段错误错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43011867/

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