Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 记忆联合问题_C_Memory - Fatal编程技术网

C 记忆联合问题

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

:)

我在为矩阵分配内存时遇到了一个非常恼人的问题。代码根本不需要工作。它总是以负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 * 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]
    @kiranBiradar
    m1
    的类型是
    double*
    。但是OP需要一个数组。对于您的情况,如果指针只指向一个double,为什么需要指针?只要
    double m1;
    就足够了。