我为矢量编写了以下结构:
typedef struct Vector_ Vector;
struct Vector_
{
int dim;
double* vector;
};
我写了一个函数来初始化该结构的一个新实例:
Vector* newVector(int length){
int i = 0;
Vector* vec = malloc(sizeof(Vector));
assert(vec != NULL);
assert(length > 0);
vec->dim = length;
vec->vector = malloc((length+1)*sizeof(double));
assert(vec->vector != NULL);
for(i=0;i<=length+1;i++) vec->vector[i] = 0;
return vec;
}
这一切都有效,但后来我编写了一个函数来重新分配内存并改变向量的长度,如下所示:
Vector* setVectorLength(Vector* vec, int length)
{
assert(vec->dim > 0);
int i = 0;
if(length > vec->dim)
{
vec->vector = realloc(vec->vector,(length+1)*sizeof(double));
assert(vec->vector != NULL);
for(i = vec->dim+1;i<=length;i++)
{
vec->vector[i] = 0;
}
}
else
{
vec->vector = realloc(vec->vector,length+1 * sizeof(double));
}
vec->dim = length;
return vec;
}
我称之为:
int main()
{
Vector* newvec = newVector(5);
setVectorLength(newvec,8);
}
由于某种原因,我重新分配向量数组内存的setVectorLength函数中的行会导致程序中止。如果我评论该部分,一切正常。有趣的是,我能够向数组写入条目,即使没有将其重新分配到足够高的长度,例如,如果我只初始化向量结构并给它长度为5,那么我可以将值写入第7或第8点vec-&gt;矢量数组,即使我从来没有为它分配过多的内存。任何提示?