[英]process get exited with return value 3221226356
每當我運行以下代碼,並以長字符串形式輸入時,它就會返回返回值3221226356
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int i=0;
char c,*input;
input=(char *)malloc(sizeof(char));
if(input==NULL)
{
printf("Could not allocate memory");
exit(1);
}
printf("%d size",strlen(input));
printf("Enter the string: ");
while((c=getchar())!='\n')
{
realloc(input, (sizeof(char)));
input[i++]=c;
}
printf("%s",input);
}
realloc
函數返回一個新的指針。 它不會更改傳遞給它的指針。
這意味着在第一次調用realloc
之后,您可能會開始寫入未分配的內存,從而導致未定義的行為 。
另請注意,您的realloc
調用僅分配一個字節。 您需要分配以前的大小加一個。
還有一個問題,即您在指向未初始化內存(順便說一下,大小為1)的指針上調用strlen
,這也會導致未定義的行為。
並且由於將分配的內存視為字符串,因此還應該為字符串終止符分配空間,因此最開始的分配應該是兩個字節。
另外兩點注意: sizeof(char)
指定始終為1
。 並且在C中不要轉換malloc
(和family)的結果 。
此代碼存在很多問題:
malloc
的結果 realloc
重新分配1個字節,但是即使這樣,您也不realloc
的返回值(這是一個調整大小的指針)做任何事情,因此這里沒有任何有用的事情 input
,因此您嘗試訪問此分配之外的內存,這將返回垃圾(如果您很幸運,沒有遇到段錯誤) 閱讀有關malloc
和realloc
文檔,以弄清楚代碼出了什么問題。
退出代碼0xC0000374
是檢測到堆損壞時返回的值。
在您重新分配的位置,您不會重新分配更多的值。 您釋放了1個字符的內存,然后分配了一個新的1個字符的內存段。 這將導致input[i++]
訪問您分配的區域之外的區域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.