A. c語言程序堆棧損壞求教
上面的輸入和輸出沒問題,下面排序演算法寫錯了
B. 請教C語言高手一個棧溢出問題~
分配的變數char
c;是字元型,但輸入的是%s字元串,這里會導致溢出。
C. c語言中出現下面情況是怎麼回事
根據這些信息,只知道變數b周圍的棧出了問題。建議用單步調試(vc6.0環境下按F10),跟蹤一下幾個變數,看看內存的情況,一點點定位問題。
拓展:
1、C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
2、盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言訂定了一套完整的國際標准語法,稱為ANSI C,作為C語言最初的標准。
D. C語言 數據結構 隊列和棧問題
給你看下棧的頭文件
你自己添加判斷是否是迴文的方法吧
#ifndef STACK_H
#define STACK_H
#include <iostream>
using std::ostream;
//template <class Type>
//class Stack;
//template <class Type>
//ostream & operator<< (ostream &, const Stack<Type> &);
template <class Type>
class Stack {
friend ostream & operator<< (ostream &, const Stack<Type> &);
public:
static const int DefaultSize;
Stack(int = DefaultSize); //創建一個最大容量為MaxStackSize的空棧
Stack(Type[], int, int = DefaultSize); //用數組初始化棧
~Stack(){ delete [] stack; }
bool IsFull(); //若元素個數等於棧的最大容量則返回TRUE,否則返回FALSE
void Add(const Type &); //若IsFull()為TRUE,則調用StackFull,否則將item插入棧頂
bool IsEmpty(); //若棧中元素個數等於0則返回TRUE,否則返回FALSE
Type * Delete(Type&); //若IsEmpty()為TRUE,則調用StackEmpty並返回0,
//否則刪除棧頂元素並返回其指針
void StackFull(); //將棧的最大容量擴大一倍
void StackEmpty(); //輸出警告:棧已空, 不能彈出變數
void Empty(); //將棧清空
int GetSize(); //獲得棧內元素數目
private:
Type * stack;
int MaxSize;
int top;
};
template <class Type>
const int Stack<Type>::DefaultSize = 10;
template <class Type>
Stack<Type>::Stack(int pMaxSize) {
MaxSize = pMaxSize;
stack = new Type[MaxSize];
top = -1;
}
template <class Type>
Stack<Type>::Stack(Type pArray[], int pLen, int pMaxSize) {
stack = new Type[pMaxSize];
for ( int i = 0; i < pLen; i++ )
{
stack[i] = pArray[i];
}
top = pLen - 1;
MaxSize = pMaxSize;
}
template <class Type>
inline bool Stack<Type>::IsFull() {
if (top == MaxSize - 1) return true;
else return false;
}
template <class Type>
inline bool Stack<Type>::IsEmpty() {
if (top == -1) return true;
else return false;
}
template <class Type>
void Stack<Type>::Add(const Type & pX) {
if (IsFull())
{
StackFull();
stack[++top] = pX;
}
else stack[++top] = pX;
}
template <class Type>
Type * Stack<Type>::Delete(Type & pX) {
if (IsEmpty())
{
StackEmpty();
return 0;
}
pX = stack[top--];
return &pX;
}
template <class Type>
void Stack<Type>::StackEmpty() {
cout << "棧已空,不能進行彈出操作!" << endl;
}
template <class Type>
void Stack<Type>::StackFull() {
Type * nStack = new Type[MaxSize * 2];
for ( int i = 0; i <= top; i++ )
{
nStack[i] = stack[i];
}
MaxSize = MaxSize * 2;
delete [] stack;
stack = nStack;
cout << "棧已滿,棧的自動容量自動擴充為原來的兩倍 (" << MaxSize << ")" << endl;
}
template <class Type>
ostream & operator << (ostream & pOutput, const Stack<Type> & pS) {
if (pS.top == -1)
{
pOutput << "空棧" << endl;
return pOutput;
}
for ( int i = 0; i <= pS.top; i++ )
{
pOutput << pS.stack[i] << " ";
}
return pOutput;
}
template <class Type>
void Stack<Type>::Empty() {
top = -1;
}
template <class Type>
int Stack<Type>::GetSize() {
return top + 1;
}
#endif
E. C語言棧程序錯誤
//修改後的代碼. 1)top要賦值,不然試圖引用空指針,bottom系統默認賦值為空指針也就相當於NULL。2)入棧與出棧代碼中的top指向也要修改,邏輯問題。自己對比一下下面修改好的代碼了。
#include <stdio.h>
#include<malloc.h>
//結點定義
typedef char datatype;
typedef struct Node
{
datatype data;
struct Node *next;
}StackNode;
StackNode *top; // 創建頭結點
StackNode *bottom;
//入棧//
void Push( datatype x )
{
StackNode *p; // 創建一個新結點p
p=(StackNode *)malloc(sizeof(StackNode));
p->data=x; // 設置p結點
p->next=top->next;
top->next=p; //頭結點next指向新的棧頂結點p
}
//出棧//
void PrintStack(StackNode *s, datatype q )
{
StackNode *p; // p指向被刪除結點
q=s->next->data;// 傳回棧頂結點的數據
putchar(q);
p=top->next;
top->next=p->next;
free(p); // 釋放p結點
}
void main()
{
char x;
top = (StackNode *)malloc(sizeof(StackNode));
top->next = NULL;
printf("輸入棧元素:\n");
x=getchar();
while(x!='!')
{
Push(x);
x=getchar();
}
char q;
while(top->next!=bottom)
{PrintStack(top, q);}
}
F. C語言,幫忙看看我哪裡有問題,運行後它說「變數aa周圍的堆棧已損壞」
1. 圖中第一個紅色框內最好改成指針而不是數組,傳一個地址就可以,int *n;當然如果題目定死了那不改也可以;
2. 圖中第二個紅色框要寫成*n = m;
你傳一個變數的地址不能當數組用,超過一次就會佔用別的內存空間,導致不確定的錯誤。
G. 程序運行時有時會報堆棧損壞.但是可以繼續執行,求教
為什麼c語言在執行工作時程序將使用一個運行時堆棧在中國一些老師或一些低劣質量的書,喜歡把棧叫堆棧。其實堆,棧是棧。c語言在執行工作時程序將使用一個運行時堆棧,其實C語言是基於過程的語言,又叫基於函數的語言。而函數的調用過程用棧又非常的合適。所以,伴隨程序的運行,函數的調用都默認給一個棧,基本上是一個線程就有一個調用棧。C++,C#,JAVA,都一個道理。
H. c語言中出現 multi-character character constant [-Wmultichar]程序如下
一般來說,字元裡面比如'.'含有空格的話,會提示這個警告,但仍然能編譯通過。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
(8)c語言某個變數周圍的棧已損壞擴展閱讀:
C語言包含的各種控制語句僅有9種,關鍵字也只有32 個,程序的編寫要求不嚴格且以小寫字母為主,對許多不必要的部分進行了精簡。實際上,語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡潔的編譯系統。
I. C語言局部變數過多會不會造成棧區堆滿
答案是會的:
系統分配給每個程序的棧空間是有限的,超過了就會堆滿。
最有代表性的就是遞歸函數,如果遞歸的深度達到一定量,程序棧就會滿,程序就會異常退出,之前使用快速排序用到遞歸,當數據量比較大,數據基本有序時遞歸深度就比較大,程序就停止了,調試錯誤顯示棧資源不足。
J. C語言什麼是變數周圍的堆棧損壞啊
指針就是指地址;數組的地址在定義變數時就已經給定了,不能再變化,其大小也是定了的,數組可以通過下表訪問,這是數組的方便之處,但是,數組可能存在越界訪問和浪費空間的問題;結構體就是將以個項目的所有的屬性放在一起,這樣方便操作;隊列有先進先出的原則;堆棧是存儲空間的概念,C語言中的局部變數就是保存在棧空間里的,而用malloc分配的空間是在堆里開辟的;變數的概念就太廣了,可以有多種類型的變數。