2 weixin 43031239 weixin_43031239 于 2018.10.11 22:13 提问

C语言编辑矩阵运算,数据溢出问题

if (td == 0){
float c1 = 2;
float c2 = 2;
float MaxDT = 20;
uint16_t N = 40;//Initialize the individuals in the tribe
uint16_t Nu = 10;
int D = Nu * 2;//Search Space dimension
int stop_index = 0;

    /*v*/
    rand_1 = rand(rand_1);
    rand_result = rand_1 / data2;
    float v_rand1 = -5 + 10 * rand_result;
    //int column1 = Nu * 2;
    Matrix_t mat_v1 = ones(N, Nu * 2);
........

问题出在最后一句mat_v1处,断点运行在倒数第二句mat_v1行列数值都特别大,运行到最后一句就数据溢出了

附上引用ones函数代码:
Matrix_t ones(uint16_t m, uint16_t n){
if (m <= 0 || n <= 0){
    exit(1);
}
Matrix_t mat = create_mat(m, n);
uint16_t i, j;
for (i = 0; i < n; i++){
    for (j = 0; j < m; j++){
        mat.data[i][j] = 1;
    }
}
return mat;
}
附上引用create函数代码:
Matrix_t create_mat(uint16_t row, uint16_t column){
Matrix_t mat;
if (row <= 0||column<=0)
{
    //printf("error, in create_mat: row <= 0||column<=0\n");
    exit(1);
}
if (row > 0 && column > 0)
{
    mat.row = row;
    mat.column = column;
    mat.data = (float **)malloc(row*sizeof(float *));//先指针的指针
    if (mat.data == NULL)
    {
        //printf("error, in create_mat: mat.data==NULL");
        exit(1);
    }
    uint16_t i;
    for (i = 0; i < row; i++)
    {
        *(mat.data + i) = (float *)malloc(column*sizeof(float));//再分配每行的指针
        if (mat.data[i] == NULL)
        {
          //printf("error, in create_mat: mat.data==NULL");
          exit(1);
        }
    }
    clear_mat(&mat);
}
return mat;

}
新人,没有悬赏。。。望路过大神相助!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言陷阱---数据溢出和类型转换
引言 当我们进行各种数学计算(四则运算,指数运算等)时,要时刻保持警惕,防止运算结果的溢出(上溢或下溢);当进行不同类型的数据混合运算时,要注意数据类型的提升或转换,避免精度丢失。 无符号整型在循环条件中造成死循环 示范代码 #include int main() { //unsigned int i = 10; size_t i = 10; while(i >= 0)
C语言中的整型溢出和移位溢出
1 整型溢出    原文链接:https://coolshell.cn/articles/11466.html     整型溢出,分为无符号整型溢出和有符号整型溢出。 对于unsigned整型溢出,C的规范是有定义的——“溢出后的数会以2^(8*sizeof(type))作模运算”,也就是说,如果一个unsigned char(1字符,8bits)溢出了,会把溢出的值与256求模
c问题---关于数组溢出的思考
逛CSDN看到这么一个问题: c问题---关于数组溢出的思考 今天在做题时,发现定义整型数组a[10],并赋初值,然后我访问a[11],输出0,再a[11]=3后访问a[11],输出3,a的长度还是10,那么a[11]存在哪里了? 原问题见:http://ask.csdn.net/questions/234444  提问:hehajoker  其实原问题下的回答已经能解决题主的问题了,只是
C语言溢出判断
看到一段python原码中对c加法溢出的判断。暂记下来 long a = xxx; long b = xxx; long sum = a + b; if ((a^sum)<0 && (a^sum )<0) { //overflow detected } ...
C语言溢出问题
由于在计算机中整型数是由补码来表示的,所以当数据规模太大时会造成溢出错误C语言在头文件limits.h中给出了相关宏定义,以下是溢出情况的演示,UINT_MAX是无符号最大值...
C运算溢出怎么办?
这个问题困扰了N久了,最好的方式就是,事先考虑好范围,选择合适的类型.当真正溢出时:0000 --  00001 --  10010 --  20011 --  30100 --  40101 --  50110 --  60111 --  71000 --  -81001 --  -71010 --  -61011 --  -51100 --  -41101 --  -31110 -- 
C数据类型变量范围 变量存储 数据溢出
以(unsigned)char为例笔记。   1 C语言数据类型   1:C语言数据类型   2 C语言数据类型表示范围 (1) 不同数据类型占用的内存大小 C标准所规定的各数据类型所定义变量会占用的内存大小: 在不同的平台上C的每一种数据类型变量所占用的内存大小可能会不同。一般在32位系统之上,char变量占用一个字节内存,short变量占用2个字节内存,int变量占用
《C语言及程序设计》实践参考——矩阵运算
返回:贺老师课程教学链接 【项目2-矩阵运算】  在数学中,一个矩阵由若干行和若干列数据组成,可以直接存储为一个二维数组。(1)矩阵相加  两个矩阵相加,要求其行、列数均相等。运算规则为:一个n行m列的矩阵A加上另一个n行m列的矩阵,得到的结果是一个n行m列的矩阵C,C中的第i行第j列位置上的数等于A和B矩阵第i行第j列上数相加的和。例如:  请编程序,实现两个矩阵的加法。[参考解答]#inclu
C语言中无符号数运算判断溢出
对于无符号加法运算,当执行C程序时,不会将溢出作为错误而发信号。例如要计算s = x + y;如果溢出则会得到结果s = (x + y) %2w或者s = x + y - 2w(w 是机器中无符号的最大二进制位数)。又因为x w且y w,所以可以用if(s
关于C语言开大数组溢出的问题
C语言的内存分配、堆栈溢出、全局变量、局部变量、全局数组大小、局部数组大小

相似问题

8
C语,如何将choice 2 循环独立出来?
4
关于C语言中“在某个变量周围的堆栈已损坏”的问题
2
求delphi高手转换个C语言的CRC16算法,算法如下
4
leetcode 345反转字符串中的元音字母C语言
2
PTA乙级 1003我要通过 数组存储问题
4
这个代码哪里有问题?为什么输出不正常
2
javascript语言怎么读取我的文档目录下的word文件并且自动汇总,判断后再显示出来?
5
怎么在javascopt语言的开发中实现div双向判断对应的input?
4
javascrpt语言里怎么实现div点击以后通过文本框给它更新的功能,html的实现?
5
leetcode 383赎金信 C语言
1
leetcode167两数之和c语言问题
4
如何利用javascrpt语言实现网页判断?怎么判断一个网页,用javasipt实现
5
C++字符串数组中的字符串长度与int数组内的数字比较之间的问题
3
真挚求教高分悬赏,请问怎么在javascrip语言里实现下载电子邮件的附件?
2
leetcode219存在重复元素C语言问题
5
利用c语言及easy x制作一个坦克大战小游戏,要求代码简单基础,不超过800行最好
16
简单的js问题,回答就有c币了:请问怎么在js里面实现求一个矩阵的数学期望值?
7
在线等高手,怎么利用javascpt语言的eval函数,实现一个简单的表达式计算器,怎么做?
27
急等马上就给c币,输入3个数字,求其中最大的和最小的数字,怎么实现?
4
javascrpt语言怎么实现ghost方式重装系统,并且重启返回网页的功能