搜索
bottom↓
回复: 3

请大家帮忙看看Nios的C程序,指针总是赋值有问题?

[复制链接]

出0入0汤圆

发表于 2012-9-25 14:50:02 | 显示全部楼层 |阅读模式
      代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "string.h"

int main()
{
  int NSize  = 100;
  unsigned int *p = NULL;
  int j = 0;
  unsigned int val[100];
  p = (unsigned int *)malloc(sizeof(int) * NSize);
  memset(p, 0, sizeof(int) * 100);
  memset(val, 0, sizeof(int ) * 100);
  for( j=0; j<5; j++)
  {
    *(p++) = j;
    val[j] = j;
    printf("p address:0x%08x context:%d\n",(int)p, *p);
    printf("val address:0x%08x context:%d\n",(int)&val[j], val[j]);
  }
  free(p);
  p = NULL;
  printf("Hello from Nios II!\n");

  return 0;
}

感觉没什么错,但是指针部分赋值总是显示数据调试有问题,请大家帮忙看看,指出哪里问题,谢谢!
调试结果显示:
NSize        100       
p        0x0400800e       
        *p        4294967295       
j        5       
val       
        val[0]        0       
        val[1]        1       
        val[2]        2       
        val[3]        3       
        val[4]        4       

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-9-25 15:46:07 | 显示全部楼层
你想要的结果是这样的吧??
p address:0x005017f0 context:0
val address:0x0022fd84 context:0
p address:0x005017f8 context:1
val address:0x0022fd88 context:1
p address:0x00501800 context:2
val address:0x0022fd8c context:2
p address:0x00501808 context:3
val address:0x0022fd90 context:3
p address:0x00501810 context:4
val address:0x0022fd94 context:4
Hello from Nios II!

出0入0汤圆

发表于 2012-9-25 15:56:01 | 显示全部楼层
for( j=0; j<5; j++)
  {
   // *(p++) = j; // 可以搜"C语言副作用, 序列点"
    *(++p) = j; // 但是这样的话, 分配的100个内存中, 第一个就浪费了. 还是用下面的比较好.
  // *p = j;  // 一
    val[j] = j;
    printf("p address:0x%08x context:%d\n",(int)p, *p); // 没必要强制转换吧? 下面同理
    printf("val address:0x%08x context:%d\n",(int)&val[j], val[j]);
// ++p; // 二
  }

不知道我的理解对不对.

出0入0汤圆

 楼主| 发表于 2012-9-26 08:11:00 | 显示全部楼层
monkerman 发表于 2012-9-25 15:56
for( j=0; j

多谢monekerman,提供了一个C语言“副作用”的资料学习,这个非常好,写C还是得规范,C“副作用”有点像volitale定义的硬件接口上,防止在寄存器与内存之间突发访问,防止不当的异常值,这是个人观点,请指正!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 09:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表