指针-CX0069:错误:变量需要堆栈帧

问题描述

CX0069:错误:变量需要堆栈帧

这段来自《C语言深度剖析》关于指针的部分

#include
int main()
{
// int i=10;
int *p=(int *)0x00bef95c;//0x00be95c是变量i的地址
*p=NULL;//这一行的问题
p=NULL;
return 1;
}

在VS2010下测试时,提示:CX0069:错误:变量需要堆栈帧

在Ubuntu下测试时,有一个warning如下:

warning: assignment makes pointer from integer without a cast
问题来了:1.对堆栈帧不太了解,百度了,但是都是一些关于堆栈的回答,没有满意的

2.不清楚为什么在VS下有这么一个错误,而linux下只是一个warning

解决方案

root@landpack:~/ak/code/c/test# ./t20
A40A972Croot@landpack:~/ak/code/c/test# ./t20
7ABE0FCroot@landpack:~/ak/code/c/test# ./t20
47769E8Croot@landpack:~/ak/code/c/test#

以上是我的执行结果:
代码如下:

#include <stdio.h>
int main(void)
{
    int i=10;
    printf("%X",&i);
    return 0;
}

你在代码中试图让一个指针强制指向一个地址,
而这个地址我估计你只是上一次执行后记录下的,然后试图赋值给p
程序每次加载到内存中执行时分配给变量的地址都在改变,你怎么能这样给p赋值呢!
希望能帮到你!

解决方案二:

分清变量与指针变量!
非静态局部变量(又称为自动变量)保存在栈(stack)中
存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量

时间: 2024-10-28 18:40:29

指针-CX0069:错误:变量需要堆栈帧的相关文章

Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值

Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇也就够了,不过我也尽量陈述的很详细 一.指针 要说指针,其实通俗易懂的话来说,他应该是保存内存地址的一个变量,我们来看一下小例子 #include <stdio.h> #include <stdlib.h> main(){ //int 变量 int i ; i = 5; //打印i的值

指针删除操作 指针赋值 错误

问题描述 指针删除操作 指针赋值 错误 #include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int *p,*q; p = new int[10]; p[0] = 2; p[1] = 1; cout << "********"<< endl; q = p+1; cout << *q <<endl;

eclipse设置-eclipse 把鼠标指针放在错误的语句上 提示快速修正 不见了 请问怎么调出来

问题描述 eclipse 把鼠标指针放在错误的语句上 提示快速修正 不见了 请问怎么调出来 我不要点击左面的那个货色的X号来看快速修正 也不要按CTR + 1:我要的是把鼠标放在错误的语句上就自动提示 的功能 知道的麻烦告诉下 我恢复默认设置也不行 要这样的效果 解决方案 窗口 > 首选项 > Java > 编辑器 > 注释 > 在输入时分析注释复选框和窗口 > 首选项 > Java > 编辑器 > 注释 > 在垂直标尺中指示可以使用"

局部变量-java 变量在堆栈内存的问题

问题描述 java 变量在堆栈内存的问题 public class Test1 { public int i; public String e=new String("123"); public Test2 test2=new Test2(); public void say(){ String str2=new String("abc"); int i=0; System.out.println(i); } public static void main(Stri

c程序设计-C语言截结构体指针中的变量又是另一个结构体指针,怎么用,代码运行不了

问题描述 C语言截结构体指针中的变量又是另一个结构体指针,怎么用,代码运行不了 #include #include #include #include #define LIST_INIT_SIZE 100//线性表存储空间的初始分配量 #define LISTINCREMENT 10//线性表存储空间的分配增量 typedef struct { int No; char name[10]; }Student; typedef struct { Student *elem;//存储空间基址 int

JavaScript错误处理和堆栈追踪浅析

有时我们会忽略错误处理和堆栈追踪的一些细节, 但是这些细节对于写与测试或错误处理相关的库来说是非常有用的. 例如这周, 对于 Chai 就有一个非常棒的PR, 该PR极大地改善了我们处理堆栈的方式, 当用户的断言失败的时候, 我们会给予更多的提示信息(帮助用户进行定位). 合理地处理堆栈信息能使你清除无用的数据, 而只专注于有用的数据. 同时, 当更好地理解 Errors 对象及其相关属性之后, 能有助于你更充分地利用 Errors. (函数的)调用栈是怎么工作的 在谈论错误之前, 先要了解下(

inetpub\wwwroot\chapter7\Books_with_Parm.xsl(26,15): 错误: 变量或参数“discount”未定义或超出范围。

问题描述 c:inetpubwwwrootchapter7Books_with_Parm.xsl(26,15):错误:变量或参数"discount"未定义或超出范围.Program:<?xmlversion="1.0"encoding="utf-8"?><xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transfor

byte-关于使用 new BYTE(100)使用之后delete出错,错误信息:堆栈被破坏

问题描述 关于使用 new BYTE(100)使用之后delete出错,错误信息:堆栈被破坏 错误如题,代码如下: #include #include #include #include #include #include #include #include using namespace std; struct name { char name_char; int fi; }; struct student_info { int id; long student_id; int class_n

指针与整形变量-下面的代码怎样改啊,请大家帮忙

问题描述 下面的代码怎样改啊,请大家帮忙 void PrintTree(MyHuffmanNode* root int n) { if (root == NULL) return; for (int i=0;i<n;i++) { cout<<"" ""; } if (root->father==0) { cout<<""|_""; } else { cout<<"&qu