请选择 进入手机版 | 继续访问电脑版
开启左侧

C语言,在VS2015中申请内存时触发断点

[复制链接]
宗Ym勇QAQ 发表于 2017-4-10 19:06:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
C语言,在VS2015中申请内存时触发断点
悬赏5金钱 状态已解决,大家来学习学习
问题描述Question Issues
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>

typedef struct element
{
        int value;
        int col;
        int row;
}element;


/*新建一个矩阵*/
element* createMatrix(int row, int col)
{
        int value = row*col;
        int i = 0;
        int r;
        int c;
        srand(time(0));
        element* matrixArray = (element*)malloc((sizeof(element)*value));
        for (r = 0; r<row; r++)
        {
                for (c = 0; c<col; c++)
                {
                        i++;
                        matrixArray.col = c;
                        matrixArray.row = r;
                        matrixArray.value = rand() % 2;
                        printf("%d   ", matrixArray.value);

                }
                printf("\n\n");

        }
        /*一个统计整个矩阵信息的元组*/
        matrixArray[0].col = col;
        matrixArray[0].row = row;
        matrixArray[0].value = value;
        printf("\n\n\n");
        return matrixArray;
}

int  printMatrix(element*matrixArray)
{
        int i;
        int j;
        int currentb = 0;
        int tempRow = 0;
        int value_ = matrixArray[0].value;
        int tempCol = 0;
        //        element*p = malloc(sizeof(element));
        element* intface = (element*)malloc((sizeof(element)*value_));
        if (intface == NULL)
        {
                printf("no space!");
                return 0;
        }
        intface[0].value = 0;
        for (i = 0; i < matrixArray[0].row; i++)
        {
                for (j = 0; j < matrixArray[0].col; j++)
                {
                        intface[currentb].row = i;
                        intface[currentb].col = j;
                        intface[currentb].value = 0;

                        printf("%d   ", intface[currentb].value);
                        currentb++;
                }
                printf("\n\n");
        }

        printf("\n\n\n");

        for (i = 1; i <= matrixArray[0].value; i++)
        {
                tempRow = matrixArray.row;
                tempCol = matrixArray.col;
                intface[tempRow*matrixArray[0].col + tempCol].value = matrixArray.value;
        }
        currentb = 0;
        for (i = 0; i < matrixArray[0].row; i++)
        {
                for (j = 0; j < matrixArray[0].col; j++)
                {
                        printf("%d   ", intface[currentb].value);
                        currentb++;
                }
                printf("\n\n");
        }
        free(intface);
}
int main()
{
        element*p = createMatrix(5, 5);

        printMatrix(p);
        free(p);
        //        system("pause");
        return 0;
}
[/mw_shl_code]

在codeblock中没有1毛钱问题,在vs2015中触发断点,指向内存为0xcccccccc,跳出区域在element* intface = (element*)malloc((sizeof(element)*value_));
求高手指点

最佳答案

查看完整内容

element* intface = (element*)malloc((sizeof(element)*value_)); 这行代码分成俩部分写 element* intface ; intface = (element*)malloc((sizeof(element)*value_)); 试试,应该是编译的的问题。 http://blog.csdn.net/lichengyu/article/details/42612587

精彩评论3

何鑫 发表于 2017-4-10 19:06:21 | 显示全部楼层
本帖最后由 何鑫 于 2017-4-11 11:46 编辑

element* intface = (element*)malloc((sizeof(element)*value_));
这行代码分成俩部分写
element* intface ;
intface = (element*)malloc((sizeof(element)*value_));
试试,应该是编译的的问题。
http://blog.csdn.net/lichengyu/article/details/42612587
回复

使用道具 举报

 楼主| 宗Ym勇QAQ 发表于 2017-4-11 14:31:40 | 显示全部楼层
何鑫 发表于 2017-4-11 11:42
element* intface = (element*)malloc((sizeof(element)*value_));
这行代码分成俩部分写
element* intfa ...

恩,没有问题,是C/C++ 的区别导致的,在GCC编译器中没有问题,但是在VS中,对于C语言的要求是变量不可以在程序中间定义
回复

使用道具 举报

何鑫 发表于 2017-4-11 14:46:36 | 显示全部楼层
宗Ym勇QAQ 发表于 2017-4-11 14:31
恩,没有问题,是C/C++ 的区别导致的,在GCC编译器中没有问题,但是在VS中,对于C语言的要求是变量不可以 ...

原来VS也有这个毛病
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行 更多
广告位
0351-8210788
周一至周日 9:00-18:00
意见反馈:mind@unigress.com
关注我们

扫一扫关注我们

Powered by Discuz! X3.4 Licensed  © 2001-2013 Comsenz Inc.( 晋ICP备12005011 )