C 记忆联合问题
:) 我在为矩阵分配内存时遇到了一个非常恼人的问题。代码根本不需要工作。它总是以负1退出( 代码在下面C 记忆联合问题,c,memory,C,Memory,:) 我在为矩阵分配内存时遇到了一个非常恼人的问题。代码根本不需要工作。它总是以负1退出( 代码在下面 #include <stdio.h> #include <stdlib.h> typedef struct mx{ int row1; int col1; double* m1; } mx_t; void mallocmatrix(mx_t* mat1){ mat1->m1 = malloc(mat1->row1
#include <stdio.h>
#include <stdlib.h>
typedef struct mx{
int row1;
int col1;
double* m1;
} mx_t;
void mallocmatrix(mx_t* mat1){
mat1->m1 = malloc(mat1->row1 * mat1->col1 * sizeof(double));
if(mat1->m1 == 0){
printf("theres something wrong:( \n");
exit(-1);
}
}
int main(int argc, char* argv[])
{
mx_t mat1;
mat1.row1 = argv[2]; mat1.col1 = argv[3];
mallocmatrix(&mat1);
free(mat1.m1);
return 0;
}
#包括
#包括
类型定义结构mx{
int row1;
int col1;
双*m1;
}mx_t;
void mallocmatrix(mx_t*mat1){
mat1->m1=malloc(mat1->row1*mat1->col1*sizeof(double));
如果(mat1->m1==0){
printf(“有点问题:(\n”);
出口(-1);
}
}
int main(int argc,char*argv[])
{
mx_t mat1;
mat1.row1=argv[2];mat1.col1=argv[3];
mallocmatrix(&mat1);
自由(mat1.m1);
返回0;
}
mat1->m1=malloc(mat1->row1*mat1->col1*sizeof(double));
需要改变
mat1->m1=malloc(sizeof(double));
mat1.row1=argv[2];mat1.col1=argv[3];
需要改变
mat1.row1=atoi(argv[2]);mat1.col1=atoi(argv[3]);
mat1.row
的类型是int
,argv[1]
的类型是char*
您使用的argv是错误的。请阅读命令行参数。argv
是字符串数组。如果您的编译器尚未向您发出警告,请启用更多警告并将其视为错误。如何mat1->m1=malloc(sizeof(double));
将生成一个矩阵?atoi
部分是正确的。只需删除这个malloc
无意义。还要注意,第一个参数是[1]
,第二个参数是[2]
@kiranBiradarm1
的类型是double*
。但是OP需要一个数组。对于您的情况,如果指针只指向一个double,为什么需要指针?只要double m1;
就足够了。