结构体返回错误-C

发布于 2024-10-21 23:24:37 字数 886 浏览 5 评论 0原文

这个程序是用 C 编写的,

它应该得到一个两个 D 数组(matrixAdd)并用 scanMtx 扫描它(扫描函数不在这里,因为代码不相关)

问题:EDMtx 函数返回扫描矩阵 1, 1,1,,1,-8,1,,1,1,1 当它返回到 main 时,它是: 0,0,0,0,0,0,junk,junk,junk

似乎有一个地址错误

我做错了什么?

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

struct matrix
{
    int* ptr;
    int row;
    int column;
};

matrix EDMtx();

void main( int argc, char* argv[])
{
    int matrixAdd[5][5]={{1,1,1,3,4},{1,1,1,3,4},{1,1,1,3,4},{1,1,1,3,4},{1,1,1,3,4}};
    matrix mtx;
    matrix scanMtx;

    mtx.ptr=&matrixAdd[0][0];
    mtx.row=5;
    mtx.column=5;

    scanMtx= EDMtx();

//  mtx= ScanM(mtx,1,1,scanMtx);- doesn't important to you.

    getchar();
}
matrix EDMtx()

{

    int matrx[3][3]={{1,1,1},{1,-8,1},{1,1,1}};
    matrix Mtx;

    Mtx.ptr=&matrx[0][0];
    Mtx.row=3;
    Mtx.column=3;

    return Mtx;
}

this program is written in C

it supposed to get a two D array( matrixAdd) and scan it with scanMtx (the scanning function isn't here becuase the code isn't relevant)

the problem: the EDMtx function return the scanning matrix 1,1,1,,1,-8,1,,1,1,1
when it return back to main it is : 0,0,0,0,0,0,junk,junk,junk

it seems that there is a address error

what did i do wrong?

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

struct matrix
{
    int* ptr;
    int row;
    int column;
};

matrix EDMtx();

void main( int argc, char* argv[])
{
    int matrixAdd[5][5]={{1,1,1,3,4},{1,1,1,3,4},{1,1,1,3,4},{1,1,1,3,4},{1,1,1,3,4}};
    matrix mtx;
    matrix scanMtx;

    mtx.ptr=&matrixAdd[0][0];
    mtx.row=5;
    mtx.column=5;

    scanMtx= EDMtx();

//  mtx= ScanM(mtx,1,1,scanMtx);- doesn't important to you.

    getchar();
}
matrix EDMtx()

{

    int matrx[3][3]={{1,1,1},{1,-8,1},{1,1,1}};
    matrix Mtx;

    Mtx.ptr=&matrx[0][0];
    Mtx.row=3;
    Mtx.column=3;

    return Mtx;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

暗藏城府 2024-10-28 23:24:37

变量matrixAddmatrx 以及它们指向的内存仅具有本地作用域。如果您希望它们在从函数返回后持续存在,请将它们声明为静态,或者重新设计您的代码逻辑。 (例如,通过使用 malloc 显式分配内存)

The variables matrixAdd and matrx, and the memory they point to, have local scope only. If you want them to persist after returning from a function, either declare them static, or redesign your code logic. (e.g. by using malloc to allocate memory explicitly)

夜深人未静 2024-10-28 23:24:37

在 EDMtx 中,Mtx.ptr 指向堆栈变量。这可能正在被摧毁。如果你想交换变量的指针,它们必须位于堆上

In EDMtx, Mtx.ptr is pointed to a stack variable. This is getting destroyed probably. If you want to exchange pointers to variables they must be on the heap

渡你暖光 2024-10-28 23:24:37
matrix EDMtx()
{

    int matrx[3][3]={{1,1,1},{1,-8,1},{1,1,1}};

    matrix Mtx;
    Mtx.ptr=&matrx[0][0];
    Mtx.row=3;
    Mtx.column=3;

    return Mtx;

}

matrx 是一个局部变量。因此,当返回EDMtx()时,它就会超出范围。并且Mtx.ptr具有局部变量matrx的引用。因此,scnMtx 的指针成员在取消引用时获取垃圾值。 永远不要返回局部变量的引用。

matrix EDMtx()
{

    int matrx[3][3]={{1,1,1},{1,-8,1},{1,1,1}};

    matrix Mtx;
    Mtx.ptr=&matrx[0][0];
    Mtx.row=3;
    Mtx.column=3;

    return Mtx;

}

matrx is a local variable. So, it goes out of scope when upon return of EDMtx(). And the Mtx.ptr has the reference of the local variable matrx. And so the pointer member of scnMtx, is getting garbage values upon dereferencing. Never return references of a local variable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文