【发布时间】:2016-04-07 10:16:02
【问题描述】:
可能这是一个非常愚蠢的问题,但我看不透,也许你能帮忙?
我的问题是矩阵的重新分配,向它添加 1 列和 1 行,然后用 `INFINITY' 填充新元素。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i, j, size = 3;
float **mat;
//Initial allocation
mat = malloc(size* sizeof(float *));
for(i = 0; i < size; i++) {
mat[i] = malloc(size * sizeof(float));
for (j = 0; j < size; j++)
mat[i][j] = 1;
}
//Print initial matrix
for(i=0; i<size; i++) {
for (j = 0; j < size; j++)
printf("%f ", mat[i][j]);
puts("\n");
}
//I'm going to add a row and a column
void *pointer = realloc(mat, (size+1)*sizeof(float*));
if(pointer != NULL) {
mat = pointer;
mat[size] = malloc((size+1)*sizeof(float));
}else
fprintf(stderr, "Error: allocation");
for(i = 0; i <= size; i++) {
mat[i][size] = 0;
mat[size][i] = 0;
}
//Print altered matrix
for(i=0; i<=size; i++) {
for (j = 0; j <= size; j++)
printf("%f ", mat[i][j]);
puts("\n");
}
//Here comes the free
for (i = 0; i < size+1; i++){
free(mat[i]); // <-- Debug says SIGTRAP
}
free(mat);
return 0;
}
提前感谢您的帮助。
编辑:我注意到只有在调试时才会出现该错误,而不是在正常运行时。我的 IDE 是 Clion。
【问题讨论】:
-
您没有向任何内容添加列。您正在添加一行,并使该行的一个元素比其他行长(假设它们的长度为
size)。 -
您还没有添加额外的列。
-
mat是如何声明的? -
float **mat, @WeatherVane @n.m.我应该如何添加列?
标签: c memory-management matrix malloc realloc